首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITableView backgroundColor和UITableView.appearance

UITableView backgroundColor和UITableView.appearance
EN

Stack Overflow用户
提问于 2015-11-10 02:44:30
回答 1查看 314关注 0票数 1

我正在尝试创建一个简单的视图,其中包含一个UITableView。我希望通过表视图的backgroundColor属性将表视图的背景色更改为紫色。Apple说,您只需将backgroundView属性设置为零即可使其正常工作。在我的情况下,它不起作用。

我必须调用UITableView.appearance().backgroundColor = UIColor.purpleColor()才能工作,而不是只调用UITableView.backgroundColor = UIColor.purleColor()

我的问题是为什么?

这是代码:

代码语言:javascript
复制
class TaskTableView: UIView {
    var tableView = UITableView(frame: CGRectZero, style: .Plain)

    override init(frame: CGRect) {
        super.init(frame: frame)

        tableView.backgroundView = nil
        tableView.backgroundColor = UIColor.purpleColor()
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        tableView.translatesAutoresizingMaskIntoConstraints = false
        addSubview(tableView)

        let views = ["table": tableView]
        addConstraints(
            NSLayoutConstraint.constraintsWithVisualFormat("|[table]|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: views)
        )

        addConstraints(
            NSLayoutConstraint.constraintsWithVisualFormat("V:|[table]|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: views)
        )
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError()
    }


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-10 04:11:52

当以编程方式创建新视图(自定义子类TaskTableView)时,上面提供的示例代码对我来说很好:

代码语言:javascript
复制
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let tableViewFrame : CGRect = CGRectMake(20, 20, 100, 300)
        let taskTableView  : TaskTableView = TaskTableView.init(frame: tableViewFrame)

        view.addSubview(taskTableView)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

当在空白的新项目中运行此代码时,使用问题中提供的TaskTableView类定义,结果是一个表视图,其背景色为紫色。

我已经说过了,我可以猜到为什么您在设置表视图的背景色时会出现问题。这个问题可能与视图生命周期有关。外观协议应用于显示在屏幕上的视图之前。您可能在视图生命周期中过早地实例化自定义视图实例,即在视图的包含视图控制器从其nib中唤醒之前。因此,您正在尝试在尚未反序列化的视图上设置属性,因此不会显示所需的背景色设置。请参阅以下来自苹果开发人员文档的引文。

如果您计划从nib文件中加载自定义视图类的实例,您应该注意到在iOS中,nib加载代码不使用initWithFrame:方法来实例化新的视图对象。相反,它使用initWithCoder:方法,该方法是NSCoding协议的一部分。

(参考:iOS视图编程指南)

值得指出的是,UITableView类通常只作为子视图添加到UIViewController中,相同的视图控制器也充当表视图的委托和数据源。苹果建议您使用他们预先配置的UITableViewController,这是一个以UITableView为视图的UIViewController,并且还充当数据源和委托。将UITableView直接添加为自定义视图类的子视图并不是最佳实践,因此是不鼓励的。

有关使用UITableView类的更多信息,请参见苹果官方文档:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33622013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档