【问题标题】:Swift Safe Area Layout not activating properlySwift 安全区域布局未正确激活
【发布时间】:2020-01-13 17:35:10
【问题描述】:

我正在以编程方式学习一些自动布局,我想在屏幕底部添加一个按钮,就在安全区域的上方。

我知道代码可以正常工作,因为我在另一个项目中对其进行了测试,我认为这是一个冲突,因为我从另一个项目中获取了这个 viewController。

我的按钮代码

   private let previousButton : UIButton = {
        let button = UIButton(type: .system)
        button.setTitle("Prev", for: .normal)
        button.translatesAutoresizingMaskIntoConstraints = false
        return button
    }()

设置约束的代码

    fileprivate func setupBottomControls() {
        view.addSubview(previousButton)
        previousButton.backgroundColor = .red
        view.addSubview(previousButton)
 NSLayoutConstraint.activate([
            previousButton.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
            previousButton.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor),
            previousButton.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor),
            previousButton.heightAnchor.constraint(equalToConstant: 50)
            ])
    }

就像我说的,这段代码在另一个项目中工作,但我认为它存在冲突,因为我如何调用这个 viewController。 这是来自第一个视图控制器的代码,它使新的 viewController(GettingStartedController) 显示出来,这里就是上面提到的按钮。

    func switchVC(){
        //enter GettingStarted controller
        let controller = GettingStartedController()
        view.addSubview(controller.view)
        present(UINavigationController(rootViewController: controller), animated: true,completion: nil) //used when no animation is present
    }

我认为问题出在关于如何更改对 GettingStartedController 的调用以便以正确方式查看安全区域的任何想法?

【问题讨论】:

  • 在应用委托中,如果我使 rootViewController 等于 GettingStartedController,一切正常。
  • 为什么需要view.addSubview(controller.view)
  • 什么时候打电话给setupBottomControls()
  • setupBottomControls() 在 vi​​ewDidLoad() 方法中被调用。

标签: swift safearealayoutguide


【解决方案1】:

检查我的代码解决方案。我在点击按钮时将您的功能添加到按钮中,现在它显示GettingStartedController()

private let previousButton : UIButton = {
    let button = UIButton(type: .system)
    button.setTitle("Prev", for: .normal)
    button.translatesAutoresizingMaskIntoConstraints = false
    button.addTarget(self, action: #selector(switchVC), for: .touchUpInside)
    return button
}()

fileprivate func setupBottomControls() {
    view.addSubview(previousButton)
    previousButton.backgroundColor = .red
    view.addSubview(previousButton)
    NSLayoutConstraint.activate([
        previousButton.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
        previousButton.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor),
        previousButton.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor),
        previousButton.heightAnchor.constraint(equalToConstant: 50)
        ])
}

@objc func switchVC(){
    //enter GettingStarted controller
    let controller = GettingStartedController()
    present(UINavigationController(rootViewController: controller), animated: true,completion: nil) //used when no animation is present
}

【讨论】:

  • 在代码中我有一行" NSLayoutConstraint.activate(["现在,我在帖子中不小心删除了它,现在将修复它。
  • 仅当我更改 AppDelegate 以使其成为 rootViewController 时,我不想要...
  • 您能否与孤立的问题共享一个 git,以便我更好地了解您如何以及何时调用该控制器?
  • 添加了一张图片以显示它正在工作,并且该按钮现在位于安全区域上方
  • GettingStartedController 是包含按钮的控制器。在这里,我们使用上面的 present 方法从 rootviewController 获取。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 2018-03-10
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多