如何强制UIView更新

时间:2015-06-19 15:19:28

标签: ios swift uiview

我正在处理从服务器下载JSON数据的应用程序,然后将其显示在UIView上。视图确实更新,只需大约15秒。我已经测试过以确保下载不会延迟更新,如果我在添加数据时更改了视图的背景颜色,它也会等待更新。我是否正确地认为这是不更新的观点,还是其他的东西?如何强制视图更新?感谢。

var newView = CustomView(product: products[0],descriptive: false)
        contentView.addSubview(newView)

        let backHeight = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Height, multiplier: 0.2, constant: 0)
        let backWidth = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: contentView, attribute: NSLayoutAttribute.Width, multiplier: 1, constant: 0)

        let backXPosition = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: contentView, attribute: NSLayoutAttribute.Left, multiplier: 1, constant:0 )
        let backYPosition = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: colorLabel, attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: 0)
        view.addConstraints([backHeight,backWidth,backXPosition,backYPosition])

这就是我将项目添加到视图中的方式。

2 个答案:

答案 0 :(得分:4)

您是否有在视图中显示数据的代码示例?

您可以通过调用

来触发视图更新
view.setNeedsDisplay() //Updates any drawing, including that in drawRect()

view.setNeedsLayout() //Triggers layoutSubviews()

但我不认为其中任何一个都会有所帮助,就好像你要添加他们应该出现的新视图而不会调用它们一样。除非你在Dharmesh建议的其他线程上。

确保您将视图添加到父级,并确保您正在为它们设置框架,就像它们是标签一样,如果没有设置框架,它们可能不会显示。

答案 1 :(得分:1)

当您从服务器获取数据时,您可以使用主队列将UI更新为视图,如下面的代码所示:

dispatch_async(dispatch_get_main_queue()) {
    //Update your UI here

}