我正在尝试使用从sizeThatFits
检索到的适当高度垂直居中UITextView。有许多其他答案表明这是计算这一点的最合适方式。
(请注意,我已经尝试使用普通字符串和属性字符串,并且两者都发挥相同的行为)。
无论我尝试什么(即使使用属性字符串并将字体大小或行高设置为更大或更小),它总是只显示一定截断的文本字符数(在这种情况下,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];
答案 0 :(得分:16)
与AutoLayout一样,您必须这样做:
[_textInfoView layoutIfNeeded];
(根本不需要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];
答案 1 :(得分:1)
您可以使用以下方法,而不是使用sizeThatFits:
方法:
你可以试试这个:
NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:14]};
// NSString class method: boundingRectWithSize:options:attributes:context is
// available only on ios7.0 sdk.
NSString *text = _textView.text;
CGRect rect = [text boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributes
context:nil];
_constraintTextViewHeight.constant = CGRectGetHeight(rect)
此方法还会考虑字符串text