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

Posted

技术标签:

【中文标题】如何使 UIView 高度等于其子视图的附加高度,以便它可以轻松滚动到最后【英文标题】:how make the UIView height equal to its subview's additional height, so that it can easily scroll till the end 【发布时间】:2016-01-20 11:43:00 【问题描述】:

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

-UIViewcontroller

  -SCrollView

    -UIView(outer)

      -buttons

      -labels 

      -UIView(inner)

           -labels

           -buttons

       -buttons

内部UIView 的高度可以不再是因为内部的内容是动态添加的。 所以主要问题是我不能滚动到内容的末尾,而是我只能滚动到内部UIView 的高度。

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

非常感谢任何帮助。

谢谢

【问题讨论】:

@Cihan Tek 请告诉我应该使用什么约束。 在下面查看我更详细的答案 【参考方案1】:

您应该根据添加的内容动态更改内部视图的框架。根据您的内部视图层次结构,您有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。现在通过调用innerView.frame.size.height = <height> 将此总和height 设置为innerView。这会根据里面的内容增加 innerView 的高度。

【讨论】:

它说“表达式不可分配”,当尝试此代码时 nnerView.frame.size.height = . 代替 '' 设置高度值,它是标签高度和按钮高度之和。我提到 在这里设置一些值。应该是这样的innerView.frame.size.height = 300。这里300是高度值。 我可以理解,并且也这样做了。它显示相同的错误消息。【参考方案2】:

将所有按钮放在容器视图的底部,并将以下约束添加到outerView(假设您添加的新容器称为“buttonContainer”):

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

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

buttonContainer 和outerView 之间的水平间距约束,以强制其全宽。

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

Working with Scroll Views

UIScrollView and Autolayout

【讨论】:

以上是关于如何使 UIView 高度等于其子视图的附加高度,以便它可以轻松滚动到最后的主要内容,如果未能解决你的问题,请参考以下文章

Autolayout - 使超级视图高度等于子视图高度+常量,其中子视图是 textView

如何设置 UIView 高度等于两个子视图 UILabel 的最大值?

如何设置UIView高度等于两个子视图UILabel的最大值?

UIView(放置在滚动视图内)在以编程方式更改高度常量时不显示其子视图

如何仅使用情节提要使 UILabel 的 UIView 超级视图适合 UILabel 的固有高度?

如何使视图高度取决于它在 Swift 中的内容?