我对iOS开发很新,我已经坚持了几天
我在UITableView
内有UIImageView
和UIScrollView
,UIImageView
位于表格的顶部,高度是静态的,所以我没有任何问题问题是UITableView
,我需要根据内容动态获取高度,并将高度设置为表格的高度约束和scrollview的内容大小。
细胞是自我大小的,因此细胞的高度根据内容而变化。到目前为止我能做的最好的事情就是使用contentSize.height
UITableView
属性获得高度,但显然这会返回基于estimatedRowHeight
i设置的高度,而不是每行的实际高度。
代码:
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
tableView.estimatedRowHeight = rowHeight
tableView.rowHeight = UITableViewAutomaticDimension
tableView.layoutIfNeeded()
tableHeight.constant = tableView.contentSize.height
scrollView.contentSize.height = imageView.bounds.height + tableView.contentSize.height
}
我尝试了什么:
contentSize.height
UITableView
属性获取高度,如代码中所示并在之前说明。在willDisplayCell
上单独获取每一行的高度,并将其添加到表格的高度约束和scrollview的contentSize。但看起来这样会增加比实际更多的行,在表的末尾给我一堆空单元格。 willDisplayCell
内的代码:
let cellHeight = cell.bounds.height
tableHeight.constant += cellHeight
scrollView.contentSize.height += cellHeight
和以前一样,除了我在cellForRowAtIndexPath
内尝试了相同的结果。
答案 0 :(得分:4)
Apple documentation不鼓励在UITableView
中嵌入UIScrollView
:
您不应在UIScrollView对象中嵌入UIWebView或UITableView对象。如果这样做,可能会导致意外行为,因为两个对象的触摸事件可能混淆和错误处理。
要解决您的问题,您可以将UIImageView放在标题视图中,或更改第一行的单元格以显示图像。然后,您可以使用UITableViewDelegate
调整单元格高度,特别是tableView:heightForRowAtIndexPath:
。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// adjust the return based on the indexPath
return 30;
}
答案 1 :(得分:0)
我有同样的问题,我找到了解决方案。我在UIScrollView中有一个TableView,并且不知道如何设置UIScrollView的动态高度。首先你必须设置你的scrollView,你可以在stackOverFlow(How to use UIScrollView in Storyboard)中查看它。下一步是将tableView的约束设置为scrollView(它应该是tableView的超级视图):前导,尾随和底部(底部是0和其他任何你想要的),以及最近对象的顶部约束不管你想要什么。 所以现在你必须设置UIScrollView的动态高度。这取决于两件事:您的设备屏幕的高度和tableView的高度(因为tableView的内容是动态的)。 您必须使用此扩展程序才能让设备更加舒适:iOS: How to determine the current iPhone/device model in Swift? 在那些事情之后我做了这个:
var viewHeight: CGFloat = 0
var modelDevice: String {
get {
return UIDevice.currentDevice().modelName
}
}
var tableViewHeight: CGFloat {
get {
// 90 is my tableViewCell's row height
return CGFloat(detail.cart.count) * 90
}
}
func configureSelfHeight(modelDevice: String) {
switch modelDevice {
case "iPhone 4", "iPhone 4s": viewHeight = 480
case "iPhone 5", "iPhone 5c", "iPhone 5s", "iPhone SE": viewHeight = 568
case "iPhone 6", "iPhone 6s", "iPhone 7": viewHeight = 667
case "iPhone 6 Plus", "iPhone 6s Plus", "iPhone 7 Plus": viewHeight = 736
default: viewHeight = 568
}
scrollView.contentSize.height = viewHeight + tableViewHeight
}
并在viewDidLayoutSubviews()中调用此方法:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
configureSelfHeight(modelDevice)
}
我希望它会对你有所帮助。:)