2012-07-04 9 views
5

से भरा हुआ स्क्रॉल करने के लिए UITextView को कैसे प्राप्त कर सकता हूं, तो मेरे पास यह UITextView है जो कि महान काम करता है, मुझे UITextView के अंदर पाठ प्राप्त नहीं हो सकता है, केवल UITextView के आकार के बाद स्क्रॉलिंग शुरू करने के लिए, UITextView 4 लाइन लंबा है, लेकिन जैसे ही मैं दूसरी पंक्ति तक पहुंचता हूं, पहली पंक्ति धक्का दी जाती है, मैं नहीं चाहता कि दृश्य 5 लाइन तक पहुंचने तक स्क्रॉलिंग शुरू कर दे। scrollingEnabled = NO इसे स्क्रॉलिंग से बिल्कुल रोकता है, इसलिए यह काम नहीं करता है।जब मैं पाठ

UITextView *barf_ = [[UITextView alloc] initWithFrame:CGRectMake(20.0, 310.0, 155, 50)]; 

barf_.contentInset = UIEdgeInsetsMake(0, 0, 0, 0); 

//[barf_ scrollRangeToVisible:NSMakeRange([barf_.text length], 0)]; 

barf_.layer.cornerRadius = 3.0f; 

barf_.layer.borderWidth = 0.5f; 

barf_.font = [UIFont fontWithName:@"Helvetica" size:13]; 

उत्तर

0

आप कि क्या आपके स्ट्रिंग वास्तव में अपने पाठ को देखने से भी बड़ा प्रस्तुत करना होगा की जाँच करें और देखने के लिए sizeWithFont:constrainedToSize:lineBreakMode: विधि का उपयोग हो सकता है अगर आप स्क्रॉल सक्षम करने के लिए की जरूरत है। हालांकि, आपको इसे किसी भी समय अपने स्क्रॉलव्यू में टेक्स्ट सेट करने के लिए कॉल करना होगा।

पूर्व:

CGSize barfStringSize = [barfString sizeWithFont:[barf_ font] 
           constrainedToSize:CGSizeMake(barf_.bounds.size.width, MAXFLOAT) 
            lineBreakMode:UILineBreakModeWordWrap] 
[barf_ setScrollEnabled:barfStringSize.height > barf_.bounds.size.height] 
2

अपने UITextView भरी हुई है जब कोई करने scrollEnabled सेट। तब self को पाठ दृश्य के प्रतिनिधि सेट या किसी अन्य वस्तु और UITextViewDelegate विधि

- (void)textViewDidChange:(UITextView *)textView 

इस विधि किसी भी समय उपयोगकर्ता द्वारा देखे जाने के अंदर का पाठ करने के लिए कोई परिवर्तन नहीं करता कहा जाता हो जाएगा लागू। इस विधि के अंदर आपको यह पता लगाने की आवश्यकता है कि आपका टेक्स्ट कितना बड़ा है और यदि यह टेक्स्ट व्यू की सीमाओं से परे है। यदि ऐसा है तो आप स्क्रॉलिंग सक्षम करें। इस विधि का प्रयोग करें:

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode 

यह एनएसएसटींग पर यूआईकिट श्रेणी विधि है। यह एक CGSize देता है जो आपको उस पाठ स्ट्रिंग की ऊंचाई बताएगा जिसे आप इसे कहते हैं।

की तरह कुछ
CGSize textSize = [textView.text sizeWithFont:textView.font 
          constrainedToSize:CGSizeMake(textView.frame.size.width, MAXFLOAT) 
           lineBreakMode:UILineBreakModeWordWrap]; 
if (textSize.height > textView.frame.size.height) { 
    textView.scrollEnabled = YES; 
} else { 
    textView.scrollEnabled = NO; 
} 
2

मैं इस सवाल का जवाब मिल गया अपने मामले में यह हो सकता है, के रूप में इसी तरह की समस्याओं के साथ अन्य लोगों के एक छोटे से TextView के साथ, उल्लेख किया है, यह स्वचालित रूप से 32 गद्दी नीचे करने के लिए कहते हैं।

विधि के अंदर जोड़ने के लिए एक साधारण फिक्स है, जो मेरी समस्या को ठीक करता है!

2

contentInset सेट करना UITextView के भीतर टेक्स्ट को और अधिक सही ढंग से प्रदर्शित करने में सहायता कर सकता है। हालांकि, यह इस समस्या को हल करने में मदद नहीं करेगा जिससे UITextView में अधिक टेक्स्ट देखने के बावजूद स्क्रॉलिंग सक्षम है।

इसी तरह, sizeWithFont जैसी विधियां सीमाएं हैं। जैसा कि माइक वेलर की उत्कृष्ट ब्लॉग श्रृंखला iOS Development: You're Doing It Wrong, NSString में बताया गया है, यह पूछने के लिए एक अच्छी वस्तु नहीं है कि UIView कितना बड़ा होना चाहिए। UIView उप-वर्ग जैसे UILabel, UIButton, आदि में इन्सेट और अन्य विचार हैं जिन्हें आकार के दौरान जिम्मेदार माना जाना चाहिए। UITextLabel कोई अपवाद नहीं है।

माइक वेलर के इस विषय पर विशेष प्रविष्टि है:

You're Doing It Wrong #2: Sizing labels with -[NSString sizeWithFont:...]

iOS 7 हमें UITextView में और अधिक परिष्कृत पाठ से निपटने का वादा किया है, इस तरह के रूप में textContainerInset गुणों के साथ। लेकिन इस बीच क्या करना है?

ठीक है, पहले हम जानते हैं कि UITextViewUIScrollView का उप-वर्ग है।इसलिए, सुनहरा नियम है कि अगर contentSize देखने के bounds संपत्ति से भी बड़ा है, स्क्रॉल दृश्य स्क्रॉल करेगा ताकि हम और अधिक सामग्री देख सकते हैं।

contentSize खिलाफ bounds काम नहीं करेगा की जांच कर रहा है या तो क्योंकि हम जानते हैं UIScrollView पहले से ही गणना कर रहा है कि क्या यह स्क्रॉल करें या पाठ के आधार पर नहीं किया जाना चाहिए, और यह हमें गलत जवाब दे रही है।

यह वह जगह है जहां मनमाने ढंग से समायोजन मान बचाव के लिए आते हैं! मेरे लिए यह मान 17.f था। आपके लिए - आपके फ़ॉन्ट्स के आधार पर - यह शायद अलग हो सकता है। हम तो नियंत्रण लेने के लिए और तय है कि क्या हम पुस्तक दृश्य स्क्रॉल करने के लिए अनुमति चाहिए:

static const CGFloat kArbritaryHeight = 17.f; 
CGFloat adjustedContentHeight = myTextView.contentSize.height - kArbritaryHeight; 
CGFloat boundsHeight = CGRectGetHeight(myTextView.bounds); 
BOOL tooMuchContent = adjustedContentHeight > boundsHeight; 

if (tooMuchContent) 
{ 
    myTextView.scrollEnabled = YES; 
} 
else 
{ 
    myTextView.scrollEnabled = NO; 
} 
संबंधित मुद्दे