पर आकार dynamic.Successfull
बदल सकते हैं!
** अपनी सामग्री आकार मान लिया जाये कि दो पाठ विचारों **
यह समाधान काम करता है की सीमा से अधिक नहीं होगा आपके विचार के लिए दो UITextViews जोड़ने, और उन दोनों के बीच अपने पाठ विभाजित करके। यह जटिल लग रहा है, लेकिन यह वास्तव में बहुत आसान है!मैं सिर्फ एक बहुत वर्बोज़ वर्णन :)
चरण 1 में लिखा है - आपके विचार के लिए दो UITextViews जोड़ें:
मैं अपने स्टोरीबोर्ड में मेरा गयी। उन्हें रखें ताकि एक दूसरे के ऊपर सीधे हो, जिसमें उनके बीच कोई जगह न हो। ऊंचाई निर्धारित करने के बारे में चिंता न करें (हम इसे बाद में सेट करेंगे)।
विचारों पर
बाध्यताएं निर्धारित वे ऊपर और नीचे, और अपने इच्छित गद्दी सहित अन्य सभी पक्षों, से कंटेनर के आसपास के किनारों से एक दूसरे से जुड़े होते हैं, इसलिए है कि। i.e. कंटेनर को ऊपर, बाएं, और दाएं, और नीचे से दूसरे पाठ दृश्य में पहला टेक्स्ट दृश्य टाई। कंटेनर को नीचे, बाएं, और दाएं, और शीर्ष से पहले टेक्स्ट व्यू पर दूसरा टेक्स्ट दृश्य जोड़ें। इससे यह सुनिश्चित होगा कि सामग्री सेट होने पर वे उचित रूप से फैले हों।
विचारों की ऊंचाई पर किसी भी बाधाओं सेट न करें, या यदि आप (बाधाओं निरीक्षक की चेतावनी से बचने के लिए) होगा, >= 20
होने के लिए दृश्यों में से एक की ऊंचाई सेट, या कुछ समान रूप से छोटी संख्या।
स्क्रॉलिंग, बाउंसिंग और स्क्रॉलिंग संकेतक दोनों को अपने टेक्स्ट दृश्यों के लिए अक्षम करें। यह समाधान एक निश्चित, गैर स्क्रोल करने योग्य ऊंचाई के विचारों पर निर्भर करता है, इसलिए यदि आप अपनी सामग्री को स्क्रॉल करना चाहते हैं, तो आपको एक कंटेनर के रूप में UIScrollView या UITableViewCell का उपयोग करना चाहिए।
आपके विचार नियंत्रक फ़ाइल में अपने दो नए पाठ विचारों के लिए दुकानों बनाएँ, उन्हें textView1
और textView2
की तरह कुछ नामकरण।
चरण 2 - सेट textContainerInsets शून्य करने के लिए:
शून्य करने के लिए दोनों पाठ विचारों पर textContainerInset प्रॉपर्टी सेट, या तो उपयोगकर्ता निर्धारित क्रम का उपयोग कर गुण:
या कोड:
self.textView1.textContainerInset = UIEdgeInsetsZero;
self.textView2.textContainerInset = UIEdgeInsetsZero;
यह सुनिश्चित करेगा कि कोई दृश्य स्थान ऐप नहीं करेगा सामग्री सेट होने पर दो विचारों के बीच कान, और अपने विचारों के आस-पास के अन्य अंतर को प्रभावित नहीं करना चाहिए।
चरण 3 -, अपनी सामग्री को विभाजित यह निर्धारित करते हैं, और देखने ऊंचाइयों अद्यतन:
बस अपने दृश्य नियंत्रक फ़ाइल (viewDidLoad
) में निम्न कोड कॉपी करें और अपनी सामग्री के लिए contentString
चर सेट।
/* Content is split across two UITextViews to avoid max drawing height */
NSString *contentString = @"Some very long piece of text...";
// Set text
NSArray *components = [contentString componentsSeparatedByString:@"\n"];
NSInteger halfLength = [components count]/2;
NSArray *firstHalf = [components subarrayWithRange:NSMakeRange(0, halfLength)];
NSArray *secondHalf = [components subarrayWithRange:NSMakeRange(halfLength, [components count] - halfLength)];
NSString *contentString1 = [firstHalf componentsJoinedByString:@"\n"];
NSString *contentString2 = [secondHalf componentsJoinedByString:@"\n"];
self.textView1.text = contentString1;
self.textView2.text = contentString2;
// Set text view heights
CGFloat fixedWidth1 = self.textView1.frame.size.width;
CGFloat fixedWidth2 = self.textView2.frame.size.width;
CGSize newSize1 = [self.textView1 sizeThatFits:CGSizeMake(fixedWidth1, CGFLOAT_MAX)];
CGSize newSize2 = [self.textView2 sizeThatFits:CGSizeMake(fixedWidth2, CGFLOAT_MAX)];
CGRect newFrame1 = self.textView1.frame;
CGRect newFrame2 = self.textView2.frame;
newFrame1.size = CGSizeMake(fmaxf(newSize1.width, fixedWidth1), MIN(newSize1.height, 8192));
newFrame2.size = CGSizeMake(fmaxf(newSize2.width, fixedWidth2), MIN(newSize2.height, 8192));
self.textView1.frame = newFrame1;
self.textView2.frame = newFrame2;
यह कोड सामग्री को विभाजित करता है लगभग निकटतम न्यूलाइन की तलाश में, बीच में स्ट्रिंग। यदि आप अपनी सामग्री को किसी भिन्न चरित्र पर विभाजित करना चाहते हैं, तो बस ऊपर दिए गए \n
की सभी घटनाओं को आप जो भी विभाजित करना चाहते हैं उसे बदलें।
चरण 4 - अपने कंटेनर दृश्य ऊंचाई सेट करें:
सेट अपने कंटेनर दृश्य (scrollview, tableViewCell, और जो कुछ भी) अपने दो पाठ विचारों की ऊंचाई, के साथ साथ जो कुछ भी अतिरिक्त जगह के लिए आप ऊपर निर्धारित किया है और उनके नीचे।
CGRect viewFrame = self.myView.frame;
viewFrame.size.height = MIN(self.textView1.frame.size.height, 8192) + MIN(self.textView2.frame.size.height, 8192) + kTextViewContainerPadding;
[self.myView setFrame:viewFrame];
(मेरी कोड में, kTextViewContainerPadding एक मैक्रो मैं ऊपर और मेरे दो पाठ विचारों नीचे अंतरिक्ष की राशि पर सेट किया है उनके कंटेनर के भीतर है)।
यही है! सौभाग्य।
समस्या यह नहीं है कि पाठ गायब हो जाता है। समस्या पाठ दृश्य की ऊंचाई है। यह एक प्रमुख कार्यान्वयन गलती की तरह लगता है। चारों ओर काम दृढ़ता से आपके यूआई के विवरण पर निर्भर करता है। – dasdom
एक बग की तरह दिखता है, नियंत्रण इस तरह व्यवहार नहीं करना चाहिए। एप्पल को बग रिपोर्ट जमा करें। –
@dasdom मेरे यूआई के बारे में क्या जानकारी आपके लिए उपयोगी होगी? अनिवार्य रूप से जब भी उपयोगकर्ता UIScrollView के नीचे स्क्रॉल करता है, तो UITextView में अधिक टेक्स्ट जोड़ा जाता है और UIScrollView की सामग्री आकार अपडेट किया जाता है। यह scrollViewDidChange विधि – SimplyLearning