में एम्बेडेड है, मैं इसके साथ दो दिनों तक संघर्ष कर रहा हूं, इसलिए मैं इंटरनेट के बुद्धिमान लोगों को हाथ में आ गया हूं।UIWebView की संपूर्ण सामग्री UITableView
मैं अपने UITableView
के हिस्से के रूप में एक लेख दिखा रहा हूं। इसके लिए सही तरीके से प्रदर्शित करने के लिए, मुझे प्रतिनिधि को सेल के लिए ऊंचाई देने की आवश्यकता है, जिसे मैं UIWebView
की ऊंचाई के समान होना चाहता हूं, इसलिए मैं वेबव्यू पर स्क्रॉल अक्षम कर सकता हूं और वेब सामग्री को पूरी तरह से प्रदर्शित कर सकता हूं स्थैतिक सेल
मेरा पहला दृष्टिकोण इसे heightForRowAtIndexpath
विधि में प्रस्तुत करना था, लेकिन यह स्पष्ट रूप से काम नहीं करता क्योंकि मुझे UIWebViewDelegate
के लिए प्रतीक्षा करने की आवश्यकता है ताकि मुझे यह बताने के लिए कि वेब दृश्य पूरी तरह से लोड हो और ऊंचाई हो। थोड़ी देर बाद मुझे एक कामकाजी समाधान मिला, जिसने वेब व्यू लोड होने पर सेल ऊंचाई को रीफ्रेश करने के लिए वेब व्यू प्रतिनिधि का उपयोग किया।
स्क्रीन आकार में बदलाव होने तक ठीक काम करता है। या तो घुमाएं या मेरे UISplitView
पूर्ण स्क्रीनिंग से। मैंने didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation)
में इसे अपडेट करने के लिए मजबूर किया, लेकिन इससे सही ऊंचाई में बसने से पहले लगभग 10 बार फ्लैश हो जाता है। मैंने इस बदलाव को लॉग किया है, और ऐसा लगता है कि वेबव्यू खुद को कई बार बुला रहा है, जिससे लूप होता है।
जैसा कि मैंने स्क्रीन को घुमाने पर शुरू किया, this लॉग में देखा गया था।
यह हर बार फिर से लोड होने पर चमकता है, और जैसा कि आप देख सकते हैं, यह स्वयं को कई गुना पुनः लोड करता है।
तो। मुझे एक यूट्यूबव्यू के अंदर एक संपूर्ण वेब दृश्य सामग्री दिखाने का एक तरीका चाहिए, और जब स्क्रीन आकार बदलता है तो विश्वसनीय रूप से ऊंचाई प्राप्त करें। अगर किसी ने इसे किसी भी तरह से प्रबंधित किया है, तो कृपया मुझे बताएं। मैं किसी को भी इनाम दूंगा और मेरा पहला बच्चा जो इसे हल कर सकता है, क्योंकि यह मुझे पागल कर रहा है।
यहां मेरा प्रासंगिक कोड है।
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
switch indexPath.row {
case 4:
//Content
print("Height for row called")
return CGFloat(webViewHeight)
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
switch (indexPath.row){
//HTML Content View
case 4:
let cell = tableView.dequeueReusableCellWithIdentifier("ContentCell", forIndexPath: indexPath)
var contentCell = cell as? ContentCell
if contentCell == nil {
contentCell = ContentCell()
}
contentCell?.contentWebView.delegate = self
contentCell?.contentWebView.scrollView.userInteractionEnabled = false
contentCell?.contentWebView.loadHTMLString((post?.contentHTML)!, baseURL: nil)
print("Cell For row at indexpath called")
return contentCell!
}
func webViewDidFinishLoad(webView: UIWebView) {
updateHeight()
}
func updateHeight(){
let webView = (self.tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 4, inSection: 0)) as! ContentCell).contentWebView
if self.webViewHeight != Double(webView.scrollView.contentSize.height) {
print("Previous WV Height = \(self.webViewHeight), New WV Height = \(webView.scrollView.contentSize.height)")
self.webViewHeight = Double(webView.scrollView.contentSize.height)
tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: 4, inSection: 0)], withRowAnimation: .Automatic)
} else {
return
}
}
override func didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation) {
print("rotated")
self.updateHeight()
//tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: 4, inSection: 0)], withRowAnimation: .Automatic)
}
मुझे पहले यह समस्या आई है, और चूंकि UIWebViews आमतौर पर एक जादू का काला बॉक्स होता है, इसलिए मैं अक्सर एक वर्कअराउंड का उपयोग कर समाप्त होता हूं। मान लें कि आपका आलेख अधिकतर टेक्स्ट है, यूटीएमटीवी व्यू के माध्यम से एचटीएमएल सामग्री को मूल रूप से प्रदर्शित करने पर विचार करें, अपने एचटीएमएल को एक जिम्मेदार स्ट्रिंग के रूप में। UITextView में HTML प्रदर्शित करने के मूल उदाहरण के लिए, इस उत्तर को देखें: http://stackoverflow.com/a/20996085/209855 –
@AaronAsh मैंने इसमें देखा, लेकिन ऐसा लगता है कि HTML सामग्री पार्स के साथ जिम्मेदार लेबल बहुत धीमे हैं टेबल्स का समर्थन नहीं करने के अलावा, मेरे उपयोग-मामले। अफसोस की बात है ... –
आपको इसे टेबलव्यू सेल में लाने में बहुत कठिनाई नहीं होनी चाहिए, यहां एक नज़र डालें: http://stackoverflow.com/a/18818036/209855 इसके अलावा, मैंने लोगों को धीमे HTML पार्सिंग के बारे में शिकायत की है, लेकिन इसे अभ्यास में कभी नहीं देखा। एक शॉट देने के लायक अभी भी? –