如何偏移空表视图中显示的消息

时间:2016-06-28 19:36:13

标签: ios swift uitableview

我希望在我的桌子为空时显示一条消息。我创建一个UILabel并将其设置为我的tableView的backgroundView,但是我想从tableView边框偏移文本。我在创建标签时通过减少UILabel宽度来尝试这个(请参阅下面的代码),但这并没有任何效果。

enter image description here

git subtree split

3 个答案:

答案 0 :(得分:0)

参考UITableView类Reference

  

表视图的背景视图会自动调整大小以匹配   表格视图的大小。

我建议您使用DZNEmptyDataSet

或者在tableView的顶部实现带有标签的空视图。

答案 1 :(得分:0)

你的CGRect不工作的原因是我打赌,因为你有自动布局设置。 Autolayout不允许您在代码中通过CGRect进行更改。

继续并禁用Autolayout,看看会发生什么。

答案 2 :(得分:0)

添加一些约束以在视图中正确定位标签。请查看下面的代码以获取灵感,但请注意,这是一个非常快速和肮脏的解决方案。在print()块中添加else,您将看到多次调用该块。你绝对应该研究一下显示信息的更好方法。

else {

    let width = self.tableView.bounds.size.width - 40.0
    let messageLabel = UILabel()
    messageLabel.text = "This is the message I would like to display when there is nothing returned from my model"
    messageLabel.numberOfLines = 0
    messageLabel.textAlignment = NSTextAlignment.Center

    let widthConstraint = NSLayoutConstraint (
            item: messageLabel,
            attribute: NSLayoutAttribute.Width,
            relatedBy: NSLayoutRelation.Equal,
            toItem: nil,
            attribute: NSLayoutAttribute.NotAnAttribute,
            multiplier: 1,
            constant: width
    )

    let xConstraint = NSLayoutConstraint(
            item: messageLabel,
            attribute: .CenterX,
            relatedBy: .Equal,
            toItem: self.tableView,
            attribute: .CenterX,
            multiplier: 1,
            constant: 0
    )

    let yConstraint = NSLayoutConstraint(
            item: messageLabel,
            attribute: .CenterY,
            relatedBy: .Equal,
            toItem: self.tableView, 
            attribute: .CenterY,
            multiplier: 0.85,
            constant: 0
    )

    self.tableView.backgroundView = messageLabel        
    self.tableView.backgroundView?.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activateConstraints([widthConstraint, xConstraint, yConstraint])

    self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None
}

这会给你:

Screenshot of