如何使UIView高度等于其子视图的附加高度,以便它可以轻松滚动直到结束

时间:2016-01-20 11:43:01

标签: ios objective-c iphone uiview

我的情况是我有以下视图布局。

-UIViewcontroller

  -SCrollView

    -UIView(outer)

      -buttons

      -labels 

      -UIView(inner)

           -labels

           -buttons

       -buttons

内部UIView高度可以更长,因为内部的内容是动态添加的。 所以主要的问题是我无法滚动直到内容的结尾,而是我只能滚动到内部UIView的高度。

注意 - 我正在使用自动布局

非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:0)

您应该根据要添加的内容动态更改内部视图的框架。根据您的内部视图层次结构,您有labelbutton。您可能会在label上设置一些动态文本,并对button进行一些操作。使用以下方法获取文本的高度

- (CGSize)getHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font {
CGSize size = CGSizeZero;
if (text) {
    CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:font } context:nil];
    size = CGSizeMake(frame.size.width, frame.size.height);
}
return size;
}

此处font是您设置为按钮和标签的字体。通过传递labelbutton上添加的文字来调用此方法。 CGSize具有height属性,heightlabelbutton。现在,通过调用height将此总和innerView设置为innerView.frame.size.height = <height>。这会根据内部的内容增加innerView的高度。

答案 1 :(得分:0)

将所有按钮放在容器视图的底部,并将以下约束添加到outerView(假设您添加的新容器已调用&#34; buttonContainer&#34;):

  • innerView底部与buttonContainer顶部之间的垂直间距约束。

  • buttonContainer底部与outerView底部之间的垂直间距约束。

  • buttonContainer和outerView之间的水平间距约束,以强制它达到最大宽度。

使用AutoLayout时,您必须有足够的约束来正确定义scrollView的contentSize。 有关将AutoLayout与UIScrollView一起使用的更多信息,请查看Apple的以下链接:

Working with Scroll Views

UIScrollView and Autolayout