我有一个tableview,我想在其行中显示uiscroll视图。我已将tableview的高度设置如下:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat{
let deviceFrame = UIScreen.main.bounds.size
print((1.21*deviceFrame.width))
return (1.21*deviceFrame.width)
}
现在我有一个自定义表格视图单元格,在该tableview单元格中,我正在尝试为uiscrollview添加页面,如下所示:
func loadContent(){
var xaxis = 0
var numOfPages = 0
let screenSize = UIScreen.main.bounds.size
for index in 1...3 {
let pagevw = CustomPageView(frame: CGRect(x: xaxis, y: 0, width: Int(scrlvw.frame.size.width), height: Int(scrlvw.frame.size.height-10)))
pagevw.translatesAutoresizingMaskIntoConstraints = true
scrlvw.addSubview(pagevw)
xaxis = xaxis + Int(screenSize.width)
numOfPages += 1
}
let content = CGSize(width: numOfPages * (Int(scrlvw.frame.height)), height: Int(scrlvw.frame.height-30))
print("content")
print(content)
scrlvw.contentSize = CGSize(width: numOfPages * (Int(scrlvw.frame.height)), height: Int(scrlvw.frame.height-30))
pagecontrol.numberOfPages = numOfPages
}
现在虽然单元格正确但表格的内容大小未正确更新。可能自动布局在这里造成了一些麻烦。虽然我希望自动布局保持不变,因为我的页面中有很多组件。
答案 0 :(得分:0)
当您将自动布局内容动态添加到UIScrollView时,您希望为子视图添加适当的约束,而不是使用旧样式设置每个子视图的x,y,w,h,然后计算scrollview的ContentSize。
这样做时,您不仅要使用约束来定位“页面”(嵌入的子视图),还要“推出”滚动视图内容大小的边。
我将一个添加子视图的示例放在一个水平滚动的UIScrollView中,该UIScrollView嵌入在垂直滚动的UIScrollView中。它在Swift 2.2中,但它会毫无问题地自动更新到3.0。
https://github.com/DonMag/SWAutoLayoutScrollView
我用几种不同的方式来分配约束,所有这些都完成了同样的事情。 “工作”方法仍然在主视图控制器类中。
你应能够复制这些技术来解决您的滚动需求。