2010-01-27 16 views
11

ऑटोरेसाइज करें मैंने पहले ही स्टैक ओवरफ़्लो और Google पर कई खोज की हैं, लेकिन मुझे मेरी समस्या का समाधान नहीं मिला।यूआईटीएक्स्टव्यू और यूआईएसक्रोल व्यू

मेरे पास ऐसे उत्पाद के लिए एक विस्तृत दृश्य है जिसमें UIScrollView और कुछ सबव्यूव (UIImageView, UILabel, UITextView) शामिल हैं। आप एक उदाहरण here पा सकते हैं।

सबसे पहले मैं इसी ऊंचाई पर UITextView (पाठ स्वयं नहीं!) को ऑटोरेज़िज़ करना चाहता हूं। फिर मैं पूरे UIScrollView को ऑटोरेज़िज़ करना चाहता हूं ताकि यह मेरे UITextView की ऊंचाई और उसके ऊपर के तत्वों को फिट कर सके। मैं निम्नलिखित कोड की कोशिश की है:

myUITextView.frame = CGRectMake(2.0, 98.0, 316.0, self.view.bounds.size.height); 

[scrollView setContentOffset:CGPointMake(0.0, 0.0) animated:NO]; 
scrollView.contentSize = CGSizeMake(320.0, 98.0 + [myUITextView frame].size.height); 

[self.view addSubview:scrollView]; 

98,0 + [myUITextView फ्रेम] .size.height) क्योंकि मेरे विचार था: myUITextView की ऊंचाई मिलने के बाद, अन्य subviews के ऊंचाई (98.0 जोड़ने) इसके लिए

दुर्भाग्य से यह बहुत अच्छी तरह से काम नहीं करता है। UIScrollView की सामग्री के आधार पर, यह बहुत छोटा या बहुत लंबा है। मैं नतीजा यह है कि UITextView की ऊंचाई हमेशा एक ही है साथ कुछ प्रवेश किया:

2010-01-27 14: 15: 45.096 MyApp [1362: 207] [myUITextView फ्रेम] .size.height: ३६७.०,००,०००

धन्यवाद!

उत्तर

0

एक UITextView स्वचालित रूप से इसे अपनी सामग्री में आकार नहीं लेगा (जहां तक ​​मुझे पता है) नहीं, इसलिए आपको टेक्स्ट का आकार प्राप्त करने और उसके अनुसार UIView आकार देने की आवश्यकता है।

this page पर कार्यों में मदद मिलेगी - आप चौड़ाई और एक स्ट्रिंग की ऊंचाई पाने के लिए उन्हें इस्तेमाल कर सकते हैं,

// Get the size that the string will render at 
NSString *contents = @"This is the content of your UITextView"; 
CGSize areaSize = [contents sizeWithFont:myView.font forWidth:myView.frame.size.width lineBreakMode:UILineBreakModeWordWrap]; 

// Then set the frame of your UITextView to be the right size 
myView.bounds = CGRectMake(0, 0, areaSize.width, areaSize.height); 

की तरह कुछ उसके बाद, आप उसके चारों ओर अन्य घटकों लेआउट कर सकते हैं।

आशा इस मदद करता है,

एस

पुनश्च चेतावनी, डॉक्स के लिए लिंक सही है, लेकिन मेरे कोड उदाहरण अपरीक्षित है, खेद :)

+0

आपकी सहायता के लिए धन्यवाद के बराबर है। ऐसा लगता है आकार WithFont: forWidth: lineBreakMode: केवल पाठ की एक पंक्ति के लिए काम करता है। मैंने आकार की कोशिश की है विथफॉन्ट: बाध्यकारी टूसाइज़: लाइन ब्रेकमोड: और यह थोड़े काम करता है। कभी-कभी यह सही ऊंचाई की गणना नहीं करता है। मुझे लगता है कि यह मेरे टेक्स्ट स्रोत में कुछ लाइन ब्रेक की वजह से है इसलिए मैंने बटन पर 30 पीएक्स जोड़ा है। – dennis3484

+0

मैंने अभी दस्तावेज़ों की जांच की है और आप बिल्कुल सही हैं, इसके बारे में खेद है! मुझे कभी-कभी गलत ऊंचाई लौटने में समस्याएं आईं और मैंने वही समाधान किया जो आपने किया - 30px जोड़ें :) – deanWombourne

22

वास्तव में क्या करने के लिए एक बहुत ही आसान तरीका है UITextView को अपनी सामग्री आकार का उपयोग करके अपनी सही ऊंचाई पर आकार बदलें। नोट करने के लिए

CGRect frame = _textView.frame; 
frame.size.height = _textView.contentSize.height; 
_textView.frame = frame; 

एक बात है कि सही contentSize है ही उपलब्ध के बाद UITextView addSubview साथ दृश्य में जोड़ दिया गया है। इससे पहले यह frame.size

+0

एक आकर्षण की तरह काम करता है – Krystian

संबंधित मुद्दे