【问题标题】:AutoLayout UITableViewCell height multiple of TableView/ScreenAutoLayout UITableViewCell 高度是 TableView/Screen 的倍数
【发布时间】:2016-12-05 22:07:41
【问题描述】:

我有一个 tableViewCell,其中包含一个应该是屏幕高度 40% 的 imageSlider。

自动布局有可能吗?将单元格添加到 tableView 后,已经为单元格计算了高度,因此忽略单元格高度添加的任何约束。

我可以实现 heightForRow 并返回正确的值,但我想知道我是否可以单独使用 AutoLayout 来实现这一点?

cell.imageSlider.heightAnchor.constraint(equalTo: tableView.heightAnchor, multiplier: 0.4)

【问题讨论】:

    标签: ios swift uitableview autolayout uikit


    【解决方案1】:

    为图像滑块添加高度约束并在单元格中声明相应的 iboutlet。将其常量值设置为 view.bounds.size.height/60.0。让我知道它是否有效。

    【讨论】:

    • 这不是我想要的,因为每次边界改变时我都必须手动更新常量......
    • 由于滑块位于单元格内,因此它不会根据自动绑定的视图调整自身大小。您可以将该代码放在 cellForRowAtIndexPath 或单元格类的 awakfromNib 方法中。
    • 您的代码 (view.bounds.size.height / 60) 不起作用,因为它使幻灯片成为视图大小的 60 倍。 bounds.height * 0.4 可以工作,但不会在旋转更改时自动更新。所以 tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 似乎是更好的地方。
    • override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) 这个方法调用tableview.reloadData
    • 是的,这是我的错误。它应该是 view.bounds.size.height*0.4
    【解决方案2】:

    为图像滑块添加高度约束并在单元格中声明相应的 iboutlet。将其常量值设置为 view.bounds.size.height*0.4。从 superView(在您的情况下为 TableViewCell)设置 imageSlider 的顶部和底部约束。让我知道它是否有效。 另外,添加以下代码

    - (void)viewWillLayoutSubviews{
        [self.imageSlider layoutIfNeeded];
        //OR 
        [cell layoutIfNeeded];
    }
    

    layoutIfNeeded 会自动更新约束。

    【讨论】:

    • 这与@Deepak Kumar 的建议大致相同(见下文)。高度不会适应不断变化的 view.bounds。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多