swift - Swift4:当你有一个导航控制器时如何设置顶部约束?
问题描述
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)
}
只需用这段代码替换你的函数,它看起来像这样,我希望你的问题能得到解决。
推荐阅读
- python - ImportError:无法从“keras.layers.normalization”导入名称“BatchNormalization”
- python - 如何连接相同 multiFASTA 文件中的序列,然后将结果打印到新的 FASTA 文件?
- xamarin - Xamarin UWP App Store 提交给出错误代码 1201
- django - 如何在Django rest框架中使用google注册为用户时提供用户类型
- javascript - 带有字符串 arrry 的数组对象中的内部字符串数组过滤器
- python - 如何检查一行中的条目是否出现在另一行中但列值的顺序发生了变化?
- unit-testing - 手动通过声纳云中的“缺失测试”
- laravel - 使用 constrained() 方法时在 Laravel 迁移中为外键指定名称
- reactjs - 如何使用 React-Bootstrap 和 Redux 显示/隐藏 Modal?
- angular - 在生产中的科尔多瓦插件中使用带有离子的 FileReader 时出错