用于UITextView文本的iOS 8 sizeThatFits未返回正确的高度(AutoLayout)

bra*_*ipt 9 objective-c uitextview ios autolayout nslayoutconstraint

我正在尝试使用从中检索的适当高度垂直居中UITextView sizeThatFits.有许多其他答案表明这是计算这个的最合适的方法.

(请注意,我已经尝试使用普通字符串和属性字符串,并且两者都发挥相同的行为).

无论我尝试什么(即使使用属性字符串并将字体大小或行高设置为更大或更小的东西),它总是只显示一定截断数量的文本字符(在这种情况下,3行,它总是完全相同) ).我错过了什么?

_textView.text = [_collectionDescription lowercaseString];
_textView.font = [UIFont fontLight:22];
_textView.textColor = [UIColor whiteColor];
_textView.textAlignment = NSTextAlignmentCenter;
_constraintTextViewHeight.constant = ceilf([_textView sizeThatFits:CGSizeMake(_textView.frame.size.width, FLT_MAX)].height);

[_textView setNeedsDisplay];
[_textView updateConstraints];
Run Code Online (Sandbox Code Playgroud)

bra*_*ipt 16

与AutoLayout一样,您必须这样做:

[_textInfoView layoutIfNeeded];
Run Code Online (Sandbox Code Playgroud)

(根本不需要setNeedsDisplay).

所以,完全工作:

_textView.text = [_collectionDescription lowercaseString];
_textView.font = [UIFont fontLight:22];
_textView.textColor = [UIColor whiteColor];
_textView.textAlignment = NSTextAlignmentCenter;
_constraintTextViewHeight.constant = ceilf([_textView sizeThatFits:CGSizeMake(_textView.frame.size.width, FLT_MAX)].height);

[_textView layoutIfNeeded];
[_textView updateConstraints];
Run Code Online (Sandbox Code Playgroud)