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(放置在滚动视图内)在以编程方式更改高度常量时不显示其子视图的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式更改 stackView 内单个 UIView 的高度?
如何移动 UIView 并使用 Swift 以编程方式放置新的 UIView?