关于autoLayout问题

vikiliu0310 发布于 2014年12月05日 | 更新于 2014年12月10日
无人欣赏。

现在在做一个输入框,我希望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动态改变高度的效果。

思路来自MBAutoGrowingTextView

共5条回复
Hector 回复于 2014年12月05日

试试

    _inputTextView.translatesAutoresizingMaskIntoConstraints = YES;
vikiliu0310 回复于 2014年12月06日

1楼 @Hector 试过了,这个不行,在xib里面,我是在一个名为bottomBarUIView里面添加的_inputTextView

然后我在 if 的判断里面,加入_inputTextView.translatesAutoresizingMaskIntoConstraints = YES;和'bottomBar.translatesAutoresizingMaskIntoConstraints = YES;'但结果还是一样

看来我只好写一个非autoLayout的好了......

vikiliu0310 回复于 2014年12月07日

问题已经解决~

Hector 回复于 2014年12月10日

3楼 @vikiliu0310

擦,解决后分享一下啊

vikiliu0310 回复于 2014年12月10日

4楼 @Hector 我在后面不是写这更新了吗........

登录 或者 注册
相关帖子