修改tableFooterView到tableView的最后一个单元格和tableView的边距的距离

时间:2018-06-19 11:32:10

标签: ios swift uitableview

我目前有一个tableView。在viewDidLoad中的ViewController中,执行以下操作:

public override function viewDidLoad() {
    let footerView = bundler.loadNibNamed("FooterView")
    tableView.tableFooterView = footerView
    tableView.tableFooterView.preservesSuperViewLayoutMargins = true
    tableView.tableFooterView.backgroundColor = UIColor.black


}

问题1: 如何设法增加tableFooterView到最后一个单元格的距离?更改单元格的layoutMargin就可以了。更改footerView.layoutMargin并没有任何效果,到最后一个单元格的距离很小。

问题2:

footerView.preservesSuperViewLayoutMargins = true和设置layoutMargins都不起作用,并且footerView一直扩展到tableView的左右边界。如何使footerView尊重tableView的边距?

编辑-完整代码:

这是FooterView.xib文件的重要部分:

<view contentMode="scaleToFill" id="W6V-Yi-de6"  customModuleProvider="target">
        <rect key="frame" x="0.0" y="0.0" width="431" height="32"/>
        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
        <subviews>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="tJT-kB-OPd">
                <rect key="frame" x="0.0" y="0.0" width="355" height="32"/>
                <state key="normal" title="bla bla bla">
                <color key="titleColor" white="0.66666666669999997" alpha="1" colorSpace="calibratedWhite"/>
                </state>
                <connections> …  </connections>
                 </button>
        </subviews>
 …
 </view

这是最终代码:

public override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    let footerView = FooterView.loadNibNamed("FooterView")
    footerView.frame = CGRect(x: 0, y: 0, width: tableView.frame.width, height: 40.0)
    let frame = footerView.frame

    tableView.tableFooterView = footerView

    let backgroundView = UIView()
    backgroundView.backgroundColor = .green

    let containerView = UIView(frame: CGRect(x: 10, y: 10, width: frame.width - 20, height: frame.height - 10))
    containerView.backgroundColor = .red
    backgroundView.addSubview(containerView)

    footerView.backgroundView = backgroundView
}

这是生成的图像:

footerView

有人知道热footerView(基本上是文本bla bla bla)位于红色containerView的中间吗?

1 个答案:

答案 0 :(得分:1)

您可以在View内使用FooterView内的容器cell/tableView。参见下面的示例,

class MyFooter: UITableViewHeaderFooterView {}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    let tableViewFrame = tableView.frame    
    let footer = MyFooter()
    footer.frame = CGRect(x: 0, y: 0, width: tableViewFrame.width, height: 150)
    tableView.tableFooterView = footer

    let frame = footer.frame
    let backgroundView = UIView()
    backgroundView.backgroundColor = .green


    let containerView = UIView(frame: CGRect(x: 8, y: 8, width: frame.width - 16, height: frame.height - 16))
    containerView.backgroundColor = .red
    backgroundView.addSubview(containerView)

    footer.backgroundView = backgroundView
}

下面是输出

enter image description here

您可以更改containerView x, y, width and height来调整边距。

少量注释

1) viewDidLoad并不是设置约束的好地方。最好使用上述方法。

2)不建议更改FooterView的backgroundColor,因此最好不要对其进行更改。

tableView.tableFooterView.backgroundColor = UIColor.black