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

Posted

技术标签:

【中文标题】UIView(放置在滚动视图内)在以编程方式更改高度常量时不显示其子视图【英文标题】:UIView (placed inside scrollview) is not showing its subviews when it's height constant was changed programmatically 【发布时间】:2019-04-26 21:07:21 【问题描述】:

我在我的 xib 文件中做了以下安排。

--> UIScrollView (top-0, leading-0, trailing-0, bottom-0) to SafeView
-----> Container_UIView (top-0, leading-0, trailing-0, bottom-0, equal height - priority 250, equal width) to UIScrollview
---------> First_UIView (top-0, leading-0, trailing-0, height - 250) to Container_UIView and (vertical spacing- 0 ) to Second_UIView
---------> Second_UIView (leading-0, trailing-0, bottom - 0) to Container_UIView and (vertical spacing- 0 ) to First_UIView
------------> UIlabel (top-0, leading-0, trailing-0) to Second_UIView  and (vertical spacing - 0) to Button
------------> Button ( leading-0, trailing-0, bottom - 0, height - 50) to Second_UIView and (vertical spacing - 0) to UIlabel

我用动态高度制作了UIlabel。我以编程方式更改了Second_View 高度。高度已更改,但未显示子视图,只有清晰的颜色背景可见,如下图所示。图中,左侧为调试视图,右侧为模拟器。调试视图显示有子视图,但模拟器没有显示这些子视图。我在图中用红色标记突出显示了子视图。图中的图片是背景,标签在 Second_View 里面,container_uiview 是清晰的颜色。在视图控制器中,我使用以下代码更改了高度:

CGRect contentRect = CGRectZero;
for (UIView *view in self.Second_View.subviews)
    if (!view.hidden)
        contentRect = CGRectUnion(contentRect, view.frame);

self.Second_ViewHeight.constant = contentRect.size.height;

有没有办法让子视图在以编程方式更改其高度常数后可见。

【问题讨论】:

图中哪个是first_uiview,哪个是second_uiview?清楚地指出它们。多行文本(标签/文本视图)和图像来自哪里? contentRect.size.height=contentRect.size.height 的意义何在? 【参考方案1】:

在我看来,你应该使用 UITableView 而不是 ScrollView。因为这种UI用tableView很容易处理。

【讨论】:

【参考方案2】:

调整UILabel的大小,即高度后,尝试调用layoutIfNeeded()或layoutSubviews()方法

【讨论】:

以上是关于UIView(放置在滚动视图内)在以编程方式更改高度常量时不显示其子视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在以编程方式制作滚动视图时解决此问题?

iOS:以编程方式在以编程方式创建的滚动视图中创建标签

如何以编程方式更改 stackView 内单个 UIView 的高度?

如何移动 UIView 并使用 Swift 以编程方式放置新的 UIView?

UIScrollView 不使用自动布局滚动(内容视图框架大小以编程方式更改)

允许在以模式方式显示的以编程方式创建的视图内自动旋转