Weird thing occurs when using sizetofit of a UITextView in IOS7
Asked Answered
N

4

14

When I test my app on IOS7 simulator. Sometimes I found it is weird when I using sizeToFit of a UITextView. The frame after sizeToFit seems right but the text can only show partly just like the photo below. (The gray area represents the UITextView new frame after sizeToFit, the whole sentence should be "which sparked a tense relationship between the two.")

enter image description here

The UITextView text is set via attributedText. It seems the problem occurs with some sentences only and is OK for most sentences.

I met this problem several times and can not solve it yet. Any help will be appreciated. Thanks.

Update:

Finally I solve the problem in an ugly way. I reset the text of the textView.

NSString *text = textView.text;
textView.text = @"";
textView.text = text;

Now it can show the whole content after sizeToFit. I think it seems like a IOS 7's bug.

Notochord answered 21/9, 2013 at 4:18 Comment(5)
Increase the Textview frame height.Rottweiler
I already set the backGroundColor of the UITextView to gray color. (the gray area of the photo above). The Textview frame height is enough to show the whole text.Notochord
Maybe [textView setNeedDisplay] ?Kingly
To Kyle Fang, Thanks for reply. I tried setNeedDisplay and it did not work.Notochord
To CupraR_On_Rails: Finally I solve the problem in an ugly way. I reset the text of the textView. NSString *text = textView.text; textView.text = @""; textView.text = text; I have updated my original post.Notochord
D
18

I had the same problem, it took me a while to figure it out, you simply need to resize the text container

[textview sizeToFit];
[textview.textContainer setSize:textview.frame.size];
Deoxyribose answered 26/12, 2013 at 12:47 Comment(1)
Great find, saved me a lot of time.Emmanuel
P
3

Noticed in IOS7 sizeToFit wasn't working also - perhaps the solution may help you too, needs the additional layoutIfNeeded

[UITEXTVIEW sizeToFit];
[UITEXTVIEW layoutIfNeeded];
[UITEXTVIEW setTextContainerInset:UIEdgeInsetsMake(0, 0, 0, 0)];
Personalize answered 25/9, 2013 at 13:59 Comment(1)
This was the difference of going onto new lines and not - SAVED! - thank you and thanks Apple for default padding/margins that took days to work out :)Must
G
0

Have you got "clip subviews" checked in interface builder?

Try to uncheck it or setting this property to "NO".

Galyak answered 24/9, 2013 at 10:32 Comment(2)
I create UITextView by coding and not used interface builder. I can not find the clipSubviews property also. Can you give me some hints?Notochord
this can be done in code by setting clipsToBounds = NO, but this doesn't appear to solve the problem.Hyozo
C
0

Try this it worked for me.

[textView setTextContainerInset:UIEdgeInsetsMake(0, 0, 0, 0)];
Chickabiddy answered 20/2, 2014 at 9:49 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.