隐藏 UIView 并调整其他小部件以占用空间?

Posted

技术标签:

【中文标题】隐藏 UIView 并调整其他小部件以占用空间?【英文标题】:Hide UIView and adjust the other widgets to take space? 【发布时间】:2018-07-10 08:34:19 【问题描述】:

我有一个屏幕,其中包含三个组件,HeaderCollectionViewbottomView。我只想在某些条件下显示底部视图。我尝试为该底部视图设置isHidden 属性,它隐藏了视图,但collectionView 没有占用空间。如果底部视图被隐藏,我想调整 collectionView 以占用剩余空间。请指出正确的方向。

【问题讨论】:

你在使用约束吗? UIStackView 可能是另一种选择 - 堆栈视图中隐藏的任何元素都会自动缩小到零宽度/高度。 我建议在这种情况下使用 UIStackView。 【参考方案1】:

连接底部视图的高度约束并以此切换隐藏/显示

self.bottomHeight.constant = show ? 100 : 0
self.view.layoutIfNeeded()

【讨论】:

做了同样的事情但它不起作用 self.bottomView.isHidden = false self.bottomViewHeight.constant = 100 self.calculateOrderTotal() self.view.layoutIfNeeded()【参考方案2】:

isHidden 属性只改变视图的可见性,不改变约束。

您可以将collectionview底部约束连接到底部视图的顶部,然后将底部视图底部约束连接到父视图的底部。

然后得到一个底部视图的高度约束的 IBOutlet 并像下面的代码一样更改他的常量:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *bottomContraint;

...

bottomContraint.constant = 0 // To hide
yourView.layoutIfNeeded()

【讨论】:

【参考方案3】:

尝试将底部视图的高度约束设置为0。这样,它将隐藏底部视图,并且集合将根据约束调整大小。

请注意,您应该给出如下约束: 标题:superview(或 safeAreaLayoutGuide)的前导空间和固定高度。 集合:前导到超级视图,顶部空间到标题。

页脚:到超级视图(或更好:safeAreaLayoutGuide)、顶部空间到集合,以及固定高度

你需要更新footerview的FixedHeight约束的常量。

【讨论】:

以上是关于隐藏 UIView 并调整其他小部件以占用空间?的主要内容,如果未能解决你的问题,请参考以下文章

使 QListWidget 调整其项目的大小以填充空间

如何隐藏 UIView 并删除“空白”空间? -iOS/单触

占用太多空间的 Swiftui 小部件列表

隐藏子小部件时,QGridLayout 未调整大小或重新绘制

UIView 调整内容大小

如果需要,允许扩展小部件占用更多空间