正确的UITextView布局高度

时间:2013-12-07 19:30:05

标签: ios iphone objective-c layout uitextview

我在这里寻求帮助,但我还没有让任何解决方案正常工作。 Here就是一个例子,但对我来说还没有用。

这是我正在使用的xib。有一个outterView和略微偏移的innerView(为了得到左边的粗蓝线。里面有一个UILabel,UITextView,UILabel和UITextView。再加上两个UIButton,我可以把它抱在视图的底部。< / p>

XIB图片:xib

挑战在于两个UITextView包含动态长度内容。它们可以成长,然后内部/外部视图也必须增长。以下是我尝试这样做的方式,但有一些变化,但没有可靠的成功。文本顶部有重叠的文本,重叠的文本,按钮等等。

// viewDidLoad (or in loadView)
-(void)viewDidLoad {
    [super viewDidLoad];

    // set UITextView text
    [warmupDesc setText:[workout objectForKey:@"warmup_description"]];
    [workoutDesc setText:[workout objectForKey:@"workout_description"]];

    // warmup sizeToFit
    [self.warmupDesc sizeToFit];
    CGSize txtSize = self.warmupDesc.contentSize;
     txtSize.height = self.warmupDesc.frame.size.height;
    self.warmupDesc.contentSize = txtSize;

    // workout sizeToFit
    [self.workoutDesc sizeToFit];
    CGSize txtSize2 = self.workoutDesc.contentSize;
    txtSize2.height = self.workoutDesc.frame.size.height;
    self.workoutDesc.contentSize = txtSize2;


    // set outview height to be sum of heights of all internal items, plus padding
    outterView.frame = CGRectMake(outterView.frame.origin.x, outterView.frame.origin.y,  outterView.frame.size.width, warmupDesc.frame.size.height + workoutDesc.frame.size.height + recordBtn.frame.size.height + 60); 

    // update innerView height to match
    innerView.frame = CGRectMake(innerView.frame.origin.x, innerView.frame.origin.y, innerView.frame.size.width, outterView.frame.size.height);
}

结果大多是这样的。我不确定UITextView的调整大小(默认为85px)。底部应该至少是它的两倍。按钮重叠,显示outterView的附加逻辑不能正常工作。

有关正确铺设这个或更好的自动调整大小方法的提示吗?到目前为止,我已经避免使用UITextviews这个原因,是否有更好的元素?

结果图片:simulator

2 个答案:

答案 0 :(得分:0)

试试这个:

-(void)viewDidLoad
{
    //...

    //warmup sizeToFit
    [self.warmupDesc sizeToFit];
    CGRect warmUpFrame = self.warmupDesc.frame;
    warmUpFrame.size.height = self.warmupDesc.contentSize.height;
    self.warmupDesc.frame = warmUpFrame;

    //workout sizeToFit
    [self.workoutDesc sizeToFit];
    CGRect workoutDescFrame = self.workoutDesc.frame;
    workoutDescFrame.height = self.workoutDesc.contentSize.height;
    self.workoutDesc.frame = workoutDescFrame;

    //...
}

但是现在它会一路走下去 当按钮离开可见视图时,您是否处理过场景? 就像使用UIScrollView

一样

答案 1 :(得分:0)

跟进。我发现下面的getContentSize函数的方法是让UITextView的高度相当有效。虽然对于小文本来说它似乎略微缩短,而对于较大的文本来说似乎过于大,所以我做了一些似乎有帮助的调整(+ 10,*。80)。但是,这种方法效果很好。

{

    self.warmupDesc.frame = CGRectMake(self.warmupDesc.frame.origin.x, self.warmupName.frame.origin.y + self.warmupName.frame.size.height - 7, self.warmupDesc.frame.size.width, ([self getContentSize: warmupDesc].height + 10) * .80);

}


-(CGSize) getContentSize:(UITextView*) myTextView{
    CGRect frame = [myTextView.text boundingRectWithSize:CGSizeMake(myTextView.frame.size.width, FLT_MAX)
                                  options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                  attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15]}
                                  context:nil];
    return frame.size;
}