Swift4:当你有导航控制器时如何设置顶部约束?
Swift4: How to set top constraint when you have a navigation controller?
screenshot
我创建了一个视图,其中放置了一个图像视图和一个视图。我以编程方式向我的两个视图添加了约束,以便它们在我选择的每个屏幕中完美居中,但是当我在 iPhone XSMax 上启动应用程序时,我在底部看到一个白色条。所以我想我的顶部约束有误,当我有导航栏时如何处理顶部约束?
func imageAndColorView() {
view.addSubview(imageView)
view.addSubview(colorView)
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
imageView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
colorView.translatesAutoresizingMaskIntoConstraints = false
colorView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
colorView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
colorView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
colorView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
imageView.image = UIImage(named: BackgroundImageKey)
view.sendSubviewToBack(imageView)
view.insertSubview(colorView, aboveSubview: imageView)
}
是的,我在 viewDidLoad 中调用了它。
对于以上的 iphoneX,您应该在 topAnchor 和 bottomAnchor 中使用 safeAreaLayoutGuide。
func imageAndColorView() {
view.addSubview(imageView)
view.addSubview(colorView)
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
imageView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
colorView.translatesAutoresizingMaskIntoConstraints = false
colorView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
colorView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
colorView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
colorView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
imageView.image = UIImage(named: BackgroundImageKey)
view.sendSubviewToBack(imageView)
view.insertSubview(colorView, aboveSubview: imageView)
}
只需用这段代码替换你的函数,它看起来像这样,我希望你的问题能得到解决。
screenshot 我创建了一个视图,其中放置了一个图像视图和一个视图。我以编程方式向我的两个视图添加了约束,以便它们在我选择的每个屏幕中完美居中,但是当我在 iPhone XSMax 上启动应用程序时,我在底部看到一个白色条。所以我想我的顶部约束有误,当我有导航栏时如何处理顶部约束?
func imageAndColorView() {
view.addSubview(imageView)
view.addSubview(colorView)
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
imageView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
colorView.translatesAutoresizingMaskIntoConstraints = false
colorView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
colorView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
colorView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
colorView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
imageView.image = UIImage(named: BackgroundImageKey)
view.sendSubviewToBack(imageView)
view.insertSubview(colorView, aboveSubview: imageView)
}
是的,我在 viewDidLoad 中调用了它。
对于以上的 iphoneX,您应该在 topAnchor 和 bottomAnchor 中使用 safeAreaLayoutGuide。
func imageAndColorView() {
view.addSubview(imageView)
view.addSubview(colorView)
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
imageView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
colorView.translatesAutoresizingMaskIntoConstraints = false
colorView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
colorView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
colorView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
colorView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
imageView.image = UIImage(named: BackgroundImageKey)
view.sendSubviewToBack(imageView)
view.insertSubview(colorView, aboveSubview: imageView)
}
只需用这段代码替换你的函数,它看起来像这样,我希望你的问题能得到解决。