自动布局UITableViewCell高度应该是TableView/屏幕的倍数

3

我有一个tableViewCell,其中包含一个图像滑块,应占屏幕高度的40%。

使用自动布局是否有可能实现?将单元格添加到tableView后,单元格的高度已经计算出来,因此添加的任何约束都会被忽略。

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

cell.imageSlider.heightAnchor.constraint(equalTo: tableView.heightAnchor, multiplier: 0.4)
2个回答

0
在图像滑块中添加高度约束,并在单元格中声明相应的IBOutlet。将其常量值设置为view.bounds.size.height/60.0。如果有效,请告诉我。

由于滑块位于单元格内,因此它不会根据视图绑定自动调整大小。您可以将该代码放置在cellForRowAtIndexPath或awakfromNib方法中的单元格类中。 - Deepak Kumar
你的代码 (view.bounds.size.height / 60) 不起作用,因为它使幻灯片大小为视图大小的 1/60。bounds.height * 0.4 可以工作,但在旋转更改时不会自动更新。因此,tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 似乎是更好的位置。 - warly
覆盖重写以下方法:override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)在此方法内调用tableview.reloadData。 - Deepak Kumar
那么tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat是更好的选择,因为它会在大小更改时自动调用,而且我只需要定义一次。无论如何,谢谢! - warly
对于我的情况,我只需要这样做:如果indexPath.row == 0 { return frame.height * 0.4 }。非常简单。但愿还有一种仅基于自动布局的解决方案... - warly
显示剩余3条评论

0
在图像滑块中添加高度约束,并在单元格中声明相应的IBOutlet。将其常量值设置为view.bounds.size.height * 0.4。从superView(在您的情况下是TableViewCell)设置imageSlider的顶部和底部约束。如果有效,请告诉我。 另外,添加以下代码。
- (void)viewWillLayoutSubviews{
    [self.imageSlider layoutIfNeeded];
    //OR 
    [cell layoutIfNeeded];
}

layoutIfNeeded 会自动更新约束。


这与@Deepak Kumar的建议差不多(见下文)。高度不会适应于视图边界的变化。 - warly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接