当我使用情节提要segue时,在屏幕上显示另一个Viewcontroller十分流畅。但是,当我不使用情节提要时,只需使用navigationController?.pushViewController(UIViewController(), animated: true)
添加简单的代码行,过渡时就会有些滞后。
我还阅读了Delay when pushing view controller (iOS)。但是,即使当我使用全新的ViewController(内部没有多余的代码)时,过渡仍然有点滞后,知道吗?
答案 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
}