UITableviewCell 中的 UIStackview 按比例填充需要不正确的帧

Posted

技术标签:

【中文标题】UITableviewCell 中的 UIStackview 按比例填充需要不正确的帧【英文标题】:UIStackview fill proportionally in a UITableviewCell takes incorrect frame 【发布时间】:2017-02-09 11:23:10 【问题描述】:

在 UIStackview 中添加比例填充设置不会让视图正确拉伸。这是预期的行为吗?

【问题讨论】:

【参考方案1】:

按比例填充的分布类型适用于固有内容大小。

因此,如果我们的垂直堆栈(高度为 600)视图有 2 个视图,ViewA(固有内容高度 200)和 ViewB(固有内容高度 100),堆栈视图会将它们的大小调整为 ViewA(高度 400)和 ViewB(高度200)。

在 IB 中,所见即所得。 拖动以更改帧是没有用的。只需运行应用程序。

只有当子视图以某种方式获得固有/约束高度时,您才会看到预期的行为。

它在 IB 中的外观这里顶部堆栈视图的视图被限制为最小高度 10 和 30,即比例 1:4。

我们真正得到的 顶部堆栈视图是我们期望的样子。以 1:4 的比例查看高度。底部的比例为 1:1,出乎意料。

【讨论】:

【参考方案2】:

您可以通过创建自定义视图来解决此问题

class CustomHeightView: UIView 
   var height = 1.0

  override public var intrinsicContentSize: CGSize 
    return CGSize(width: 0.0, height: height)
  

将 UIView 的类更改为 CustomHeightView

所以在 Controller 中为 UIViews 创建一个 outlet

@IBOutlet weak var header_one: CustomHeightView!
@IBOutlet weak var header_two: CustomHeightView!

然后在你的 viewDidLoad 中设置你想要的比例

override func viewDidLoad() 
    super.viewDidLoad()

    header_one.height = 1.8
    header_two.height = 1.2

【讨论】:

以上是关于UITableviewCell 中的 UIStackview 按比例填充需要不正确的帧的主要内容,如果未能解决你的问题,请参考以下文章

更改 UITableViewCell 中的对象也更改了重用 UITableViewCell 的对象

确定 UITableViewCell 中的 UIButton

UITableViewCell 事件中的 UIButton 不起作用

UITableViewCell 中的 UICollectionView

UITableVIewCell 中的 UIScrollView 不会滚动

UITableViewCell 中的 UITextField - UIButton