现在在做一个输入框,我希望UITextView根据字数跟行数来动态改变高度于是用了一下方法
-(void)setTextViewSize
{
static CGFloat maxHeight = 130.0f;
CGRect frame = _inputTextView.frame;
CGSize constraintSize = CGSizeMake(frame.size.width, MAXFLOAT);
CGSize size = [_inputTextView sizeThatFits:constraintSize];
if (size.height > maxHeight){
size.height = maxHeight;
_inputTextView.scrollEnabled = YES;
// 允许滚动
}else{
_inputTextView.scrollEnabled = NO;
// 不允许滚动,当textview的大小足以容纳它的text的时候,需要设置scrollEnabed为NO,否则会出现光标乱滚动的情况
}
_inputTextView.frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, size.height);
}
但是根据ScrollView的特性,一旦size.height 大于maxHeight,scrollEnabled=yes之后,UITextView 就会恢复到xib里面设置的高度。
PS:UITextView还有一个UIView作为父视图; 现在我想要在scrollEnabel=yes之后,固定高度。请问有什么解决方法?
问题已解决
更新:可以在类里面添加一个属性constraint
指向在xib里面的高度约束,然后在上面代码里面最后一行添加self.heightConstraint.constant = newHeight;
,
原理就是同时动态修改AutoLayout的约束,这样子就可以让其他的view的约束不冲突的情况下,达到在AutoLayout里面textView动态改变高度的效果。
1楼 @Hector 试过了,这个不行,在xib里面,我是在一个名为bottomBar
的UIView
里面添加的_inputTextView
。
然后我在 if 的判断里面,加入_inputTextView.translatesAutoresizingMaskIntoConstraints = YES;
和'bottomBar.translatesAutoresizingMaskIntoConstraints = YES;'但结果还是一样
看来我只好写一个非autoLayout的好了......