推uiviewcontroller时滞后

时间:2018-06-22 09:28:06

标签: ios swift xcode uinavigationcontroller

当我使用情节提要segue时,在屏幕上显示另一个Viewcontroller十分流畅。但是,当我不使用情节提要时,只需使用navigationController?.pushViewController(UIViewController(), animated: true)添加简单的代码行,过渡时就会有些滞后。

我还阅读了Delay when pushing view controller (iOS)。但是,即使当我使用全新的ViewController(内部没有多余的代码)时,过渡仍然有点滞后,知道吗?

enter image description here

6 个答案:

答案 0 :(得分:1)

在应用程序委托中,将窗口的背景色设置为红色。

window?.backgroundColor = .red

还要在推送视图控制器中将其视图设置为红色。

view.backgroundColor = .red

以编程方式将视图控制器嵌入UINavigationController时,遇到了相同的问题。

答案 1 :(得分:1)

Swift 5.3,Xcode 12

我遇到了同样的问题,试图添加到主线程中,但是显然问题是我正在以编程方式推送创建的viewController,而backgroundColor为nil。 只需将pushViewController中的颜色设置为其他颜色即可解决此问题。

self.view.backgroundColor = yourColor

答案 2 :(得分:1)

当我以编程方式绘制UI时遇到了相同的问题。

以我为例,重写loadView函数解决了我的问题。

import UIKit

class MyViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.title = "My tasks"
}

override func loadView() {
    // You can load your view here. For simplicity, I just give it a background color
    let v = UIView()
    v.backgroundColor = UIColor.orange

    view = v // This line does the magic
}

}

答案 3 :(得分:0)

我在模拟器上以慢速动画进行调试。 “滞后”是底层的先前视图控制器的视图,如@yesleon所述。我在viewWillDisappear时将上一个视图的alpha设置为0,在viewWillAppear时将其设置为1。现在推送到新的控制器似乎更好,但是当推送回原始的视图控制器时,它仍然有些不完美,还有更好的解决方案吗?

class Channels extends React.Component {
    onClick(event) {
        this.props.onClick(event);
        console.log('Child');
    }

    render () {
        return (
           <Link onClick={this.onClick} to={...}>
              <NewMessage># {channel.name}</NewMessage>
           </Link>
        );
    }
}

答案 4 :(得分:0)

我遇到了同样的问题,将ui代码及其约束放在viewDidLoad中,并修复了loadView()。现在,动画正在平稳地移动。

在这里引用:https://stackoverflow.com/a/3424052/10158398

loadView是实际设置视图的方法(设置所有 出口,包括self.view)。

viewDidLoad您可以通过其名称来找出。这是一个委托方法 加载视图(已设置所有插座)后调用 只是通知控制器它现在可以开始使用 网点。

viewDidLoad:“在视图控制器具有以下位置后调用此方法 将其关联的视图加载到内存中。这个方法叫做 无论视图是存储在nib文件中还是创建 在loadView方法中以编程方式进行。”

loadView:“如果手动创建视图,则必须覆盖此视图 方法并使用它来创建您的视图。”

例如:

class DetailViewController: UIViewController {
    let imageView = UIImageView()
    var picture: Picture?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
    
    override func loadView() {
        view = UIView()
        view.backgroundColor = .white
        
        imageView.translatesAutoresizingMaskIntoConstraints = false
        imageView.contentMode = .scaleAspectFit
        view.addSubview(imageView)
        
        NSLayoutConstraint.activate([
            imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            imageView.centerYAnchor.constraint(equalTo: view.centerYAnchor)
        ])
        
        if let picture = picture {
            let path = getDocumentDirectory().appendingPathComponent(picture.picture)
            imageView.image = UIImage(contentsOfFile: path.path)
        }
    }

答案 5 :(得分:0)

Viewcontroller 需要渲染视图,所以在视图下面添加背景颜色或设置标题

override func viewDidLoad() {
            super.viewDidLoad()
            self.navigationItem.title = "Title"
            self.view.backgroundColor = .red
    
        }