2015-10-21 13 views
15

के साथ अपनी सामग्री के रूप में UIWebView को एक स्क्रॉल व्यू में एम्बेड किया गया एक वेब दृश्य मिला है, और मैं चाहता हूं कि वेब दृश्य को अपनी सभी सामग्री दिखाने के लिए "विस्तारित" किया जाए, जिसे मैं चाहता हूं मेरे स्क्रॉल व्यू के साथ स्क्रॉल करें।ऑटो लेआउट

कारण मैं स्क्रॉल का उपयोग कर रहा हूं एक सुपर व्यू के रूप में देखें और स्क्रॉल व्यू के रूप में वेब दृश्य का उपयोग न केवल इसलिए है क्योंकि मेरे पास वेब दृश्य से ऊपर लेबल हैं जिन्हें मैं स्क्रॉलिंग प्रक्रिया में शामिल करना चाहता हूं (स्क्रीनशॉट देखें)।

तो मैं वेबव्यू को स्वयं आकार कैसे बदलूं ताकि यह उस सामग्री को दिखाने के लिए आवश्यक सभी जगहों को उठाए?

और उसके बाद, मैं वेबव्यू के आकार के अनुसार पर्यवेक्षण (स्क्रॉल व्यू) का आकार कैसे बदलूं?

1

2

उत्तर

26

यह काम आप निम्न चरणों क्या करना है करने के लिए:

  1. आपके विचार नियंत्रक
  2. अक्षम स्क्रॉल में एक आउटलेट के लिए निब से UIWebView कनेक्ट करें वेब दृश्य में
  3. पर बाधाएं सेट करें वेब दृश्य के शीर्ष पर, UIView (मेरे उदाहरण में मैंने उस दृश्य में सभी लेबल छोड़े गए) और UIWebView
  4. UIWebView के height को अपने व्यू कंट्रोलर में आउटलेट में बाध्य करें।
  5. सेट UIWebViewDelegate
  6. के रूप में देखें नियंत्रक सेट webViewDidFinishLoad में ऊंचाई बाधा वेब दृश्य के अंदर पुस्तक को देखने के contentSize की ऊंचाई के लिए निरंतर की।
  7. प्रारंभ कुंजी-मूल्य सामग्री पर ध्यान देना ऊंचाई बदलने के लिए आकार, जब वेब दृश्य की ऊंचाई बदलनी है क्योंकि वेबपृष्ठ के सेगमेंट पृष्ठ को पुनः लोड किए बिना अपना आकार बदलते हैं (जैसे accordeons, या मेनू)।

मैं बाधाओं को विस्तार से समझाऊंगा जैसा कि आप पहले से ही उन्हें स्वयं समझ चुके हैं। यहाँ की कमी का एक स्क्रीनशॉट है:

import UIKit 

var MyObservationContext = 0 

class ViewController: UIViewController { 

    @IBOutlet weak var webview: UIWebView! 
    @IBOutlet weak var webviewHeightConstraint: NSLayoutConstraint! 
    var observing = false 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     webview.scrollView.scrollEnabled = false 
     webview.delegate = self 
     webview.loadRequest(NSURLRequest(URL: NSURL(string: "https://www.google.de/intl/de/policies/terms/regional.html")!)) 
    } 

    deinit { 
     stopObservingHeight() 
    } 

    func startObservingHeight() { 
     let options = NSKeyValueObservingOptions([.New]) 
     webview.scrollView.addObserver(self, forKeyPath: "contentSize", options: options, context: &MyObservationContext) 
     observing = true; 
    } 

    func stopObservingHeight() { 
     webview.scrollView.removeObserver(self, forKeyPath: "contentSize", context: &MyObservationContext) 
     observing = false 
    } 

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
     guard let keyPath = keyPath else { 
      super.observeValueForKeyPath(nil, ofObject: object, change: change, context: context) 
      return 
     } 
     switch (keyPath, context) { 
     case("contentSize", &MyObservationContext): 
      webviewHeightConstraint.constant = webview.scrollView.contentSize.height 
     default: 
      super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context) 
     } 
    } 
} 

extension ViewController: UIWebViewDelegate { 
    func webViewDidFinishLoad(webView: UIWebView) { 
     print(webView.request?.URL) 
     webviewHeightConstraint.constant = webview.scrollView.contentSize.height 
     if (!observing) { 
      startObservingHeight() 
     } 
    } 
} 
+0

हे! जब आपने शुरुआत में इसे पोस्ट किया था तो मैंने आपका जवाब देखा लेकिन जब मैं अपने ऐप के दूसरे संस्करण पर काम कर रहा था तो समस्या को ठीक करने का फैसला किया। बहुत बहुत धन्यवाद, मैंने बस सब कुछ ठीक करने की कोशिश की और यह बहुत अच्छी तरह से काम किया।मुझे केवल स्क्रॉल व्यू को ऑफ़सेट करने के लिए कुछ बाधा मानों को ठीक करना पड़ा था (क्योंकि मेरे पास शीर्ष पर नेविगेशन बार भी है, यह बिल्कुल खाली पर्यवेक्षण नहीं है)। यह पहली बार है जब मैं पर्यवेक्षकों के साथ कोड का उपयोग करता हूं, इसलिए मुझे इसे बाद में और अधिक बारीकी से देखना होगा, लेकिन अभी के लिए, यह काम करता है! धन्यवाद –

+0

आपकी प्रतिक्रिया के लिए धन्यवाद, मुझे खुशी है कि इससे आपकी मदद मिली। – joern

+0

इस – bitsoverflow

2

@joern से महान समाधान:

enter image description here

तो, यहाँ कोड है। मेरे लिए ठीक काम करता है। मैं सिर्फ तेज 3. करने के लिए अपने कोड अनुकूलित

स्विफ्ट 3 अद्यतन कोड:

मैं भी पहले इसे बनाने था stopObservingHeight निकालें पर्यवेक्षक को रोकने के लिए संशोधित।

import UIKit 

var MyObservationContext = 0 

class ViewController: UIViewController { 

    @IBOutlet weak var webview: UIWebView! 
    @IBOutlet weak var webviewHeightConstraint: NSLayoutConstraint! 
    var observing = false 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     webview.scrollView.isScrollEnabled = false 
     webview.delegate = self 
     webview.loadRequest(NSURLRequest(URL: NSURL(string: "https://www.google.de/intl/de/policies/terms/regional.html")!)) 
    } 

    deinit { 
     stopObservingHeight() 
    } 

    func startObservingHeight() { 
     let options = NSKeyValueObservingOptions([.new]) 
     webview.scrollView.addObserver(self, forKeyPath: "contentSize", options: options, context: &MyObservationContext) 
     observing = true; 
    } 

    func stopObservingHeight() { 
    if observing { 
     webView.scrollView.removeObserver(self, forKeyPath: "contentSize", context: &MyObservationContext)    
     observing = false 
    } 
} 

    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
    guard let keyPath = keyPath, 
     let context = context else { 
     super.observeValue(forKeyPath: nil, of: object, change: change, context: nil) 
     return 
    } 
    switch (keyPath, context) { 
    case("contentSize", &MyObservationContext): 
     webviewHeightConstraint.constant = webview.scrollView.contentSize.height 
    default: 
     super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context) 
    } 

} 
} 

extension ViewController: UIWebViewDelegate { 
    func webViewDidFinishLoad(_ webView: UIWebView) { 
     print(webView.request?.url ?? "nil") 
     webviewHeightConstraint.constant = webview.scrollView.contentSize.height 
     if (!observing) { 
      startObservingHeight() 
     } 
    } 
} 
संबंधित मुद्दे