How do I size a UITextView to its content?

2018-12-31 02:32发布

Is there a good way to adjust the size of a UITextView to conform to its content? Say for instance I have a UITextView that contains one line of text:

"Hello world"

I then add another line of text:

"Goodbye world"

Is there a good way in Cocoa Touch to get the rect that will hold all of the lines in the text view so that I can adjust the parent view accordingly?

As another example, look at the notes' field for events in the Calendar application - note how the cell (and the UITextView it contains) expands to hold all lines of text in the notes' string.

30条回答
牵手、夕阳
2楼-- · 2018-12-31 02:57

Guys using autolayout and your sizetofit isn't working, then please check your width constraint once. If you had missed the width constraint then the height will be accurate.

No need to use any other API. just one line would fix all the issue.

[_textView sizeToFit];

Here, I was only concerned with height, keeping the width fixed and had missed the width constraint of my TextView in storyboard.

And this was to show up the dynamic content from the services.

Hope this might help..

查看更多
泛滥B
3楼-- · 2018-12-31 02:58

if any other get here, this solution work for me, 1"Ronnie Liew"+4"user63934" (My text arrive from web service): note the 1000 (nothing can be so big "in my case")

UIFont *fontNormal = [UIFont fontWithName:FONTNAME size:FONTSIZE];

NSString *dealDescription = [client objectForKey:@"description"];

//4
CGSize textSize = [dealDescription sizeWithFont:fontNormal constrainedToSize:CGSizeMake(containerUIView.frame.size.width, 1000)];

CGRect dealDescRect = CGRectMake(10, 300, containerUIView.frame.size.width, textSize.height);

UITextView *dealDesc = [[[UITextView alloc] initWithFrame:dealDescRect] autorelease];

dealDesc.text = dealDescription;
//add the subview to the container
[containerUIView addSubview:dealDesc];

//1) after adding the view
CGRect frame = dealDesc.frame;
frame.size.height = dealDesc.contentSize.height;
dealDesc.frame = frame;

And that is... Cheers

查看更多
栀子花@的思念
4楼-- · 2018-12-31 02:59

disable scrolling

add constaints

and add your text

[yourTextView setText:@"your text"];
[yourTextView layoutIfNeeded];

if you use UIScrollView you should add this too;

[yourScrollView layoutIfNeeded];

-(void)viewDidAppear:(BOOL)animated{
    CGRect contentRect = CGRectZero;

    for (UIView *view in self.yourScrollView.subviews) {
         contentRect = CGRectUnion(contentRect, view.frame);
    }
    self.yourScrollView.contentSize = contentRect.size;
}
查看更多
浅入江南
5楼-- · 2018-12-31 02:59

Here is the answer if you need resize textView and tableViewCell dynamically in staticTableView

[https://stackoverflow.com/a/43137182/5360675][1]

查看更多
骚的不知所云
6楼-- · 2018-12-31 03:01

Very easy working solution using code and storyboard both.

By Code

textView.scrollEnabled = false

By Storyboard

Uncheck the Scrolling Enable

enter image description here

No need to do anything apart of this.

查看更多
心情的温度
7楼-- · 2018-12-31 03:01

The only code that will work is the one that uses 'SizeToFit' as in jhibberd answer above but actually it won't pick up unless you call it in ViewDidAppear or wire it to UITextView text changed event.

查看更多
登录 后发表回答