【问题标题】:Swift4: How to set top constraint when you have a navigation controller?Swift4:当你有一个导航控制器时如何设置顶部约束?
【发布时间】:2019-04-10 09:13:32
【问题描述】:

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 中调用了它。

【问题讨论】:

  • 添加您的问题的屏幕截图
  • 能否请您尝试在 viewDidAppear 中调用此函数。
  • @RajeshKumarR 完成
  • @ManojRlogical 为什么它会起作用?我的代码有问题
  • 问题是,在新项目中使用您的代码,设置 colorView 的 bg 颜色并在 iOS12 中的 XSMax 上运行会产生与您的屏幕截图不同的结果(它从上到下完全填充视图)。你的设置是什么?

标签: swift uiview uiimageview constraints


【解决方案1】:

对于上面的 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)
    }

只需用这段代码替换你的函数,它会看起来像这样,我希望你的问题会得到解决。

【讨论】:

  • 其实恰恰相反...... OP想要避免(如,不要使用)安全区域并填满整个视图。
  • 那么不要在bottomAnchor中给出safeAreaLayoutGuide
  • 我还有一个问题,我可以通过编程设置一些约束并在情节提要中设置其他约束吗?
猜你喜欢
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 2020-01-12
  • 2017-11-18
  • 1970-01-01
相关资源
最近更新 更多