我正在为我的应用设计一个注册页面视图,以编程方式,用户可以在其中输入自己的图像和一些信息。
在我的LoginController中,我使用我的RegisterController的rootviewcontroller创建一个UINavigationController,然后显示它。
func handleRegisterButtonClicked() {
let registerController = RegisterController()
let navController = UINavigationController(rootViewController: registerController)
present(navController, animated: true, completion: nil)
}
现在我为他们添加了一张图片,点击上传他们的照片。我希望这张照片总是在导航栏下面显示30px,而是重叠导航栏,从屏幕顶部显示30px:
Portrait Orientated Landscape Orientated
class RegisterController: UIViewController {
...
func setupViews() {
profilePic.topAnchor.constraint(equalTo: view.topAnchor, constant: 30).isActive = true
}
有没有办法为profilePic添加约束,以便将其锚定到导航栏的底部(纵向和横向)?
答案 0 :(得分:4)
而不是view.topAnchor
尝试topLayoutGuide.bottomAnchor
。这应该将它固定在导航栏的底部(视图控制器的“顶部布局指南”)。
func setupViews() {
profilePic.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor, constant: 30).isActive = true
}
在iOS 11 topLayoutGuide
和bottomLayoutGuide
中,我们不推荐使用safeAreaLayoutGuide
(UIView
属性,而不是UIViewController
)。
如果您的应用支持iOS 11,则应执行以下操作:
func setupViews() {
if #available(iOS 11.0, *) {
profilePic.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 30).isActive = true
} else {
profilePic.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor, constant: 30).isActive = true
}
}
如果/当您的应用仅支持iOS 11或更高版本时,您可以删除条件可用性检查,并使用safeAreaLayoutGuide
版本。
答案 1 :(得分:0)
就我而言,我还必须为给定的视图控制器禁用edgesForExtendedLayout
属性。
edgesForExtendedLayout = []
答案 2 :(得分:0)
我通过使导航栏不透明来解决此问题:
在RegisterController中,尝试以下操作:
- (void)viewDidLoad{
[super viewDidLoad];
self.navigationController.navigationBar.translucent = NO;
}