在UITableViewCell

时间:2017-02-25 13:32:50

标签: ios iphone swift uitableview autolayout

我有一个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
}

现在虽然单元格正确但表格的内容大小未正确更新。可能自动布局在这里造成了一些麻烦。虽然我希望自动布局保持不变,因为我的页面中有很多组件。

1 个答案:

答案 0 :(得分:0)

当您将自动布局内容动态添加到UIScrollView时,您希望为子视图添加适当的约束,而不是使用旧样式设置每个子视图的x,y,w,h,然后计算scrollview的ContentSize。

这样做时,您不仅要使用约束来定位“页面”(嵌入的子视图),还要“推出”滚动视图内容大小的边。

我将一个添加子视图的示例放在一个水平滚动的UIScrollView中,该UIScrollView嵌入在垂直滚动的UIScrollView中。它在Swift 2.2中,但它会毫无问题地自动更新到3.0。

https://github.com/DonMag/SWAutoLayoutScrollView

我用几种不同的方式来分配约束,所有这些都完成了同样的事情。 “工作”方法仍然在主视图控制器类中。

能够复制这些技术来解决您的滚动需求。