【问题标题】:Programmatically created UIViewController partially hidden by navigation bar以编程方式创建的 UIViewController 被导航栏部分隐藏
【发布时间】:2020-02-09 15:39:09
【问题描述】:

我有一个以编程方式创建的UIViewController 子类,没有Interface Builder。该类称为ColorController,因为它编辑颜色。当我将它添加到UINavigationController 内的弹出窗口时,它的内容隐藏在导航栏下。从 IB 故事板文件中提取 ColorController 时,以前不会发生这种情况。

在我的ColorController 上是否有一些属性或方法必须重写以告诉它在导航控制器中调整其边界?

现在我所做的只是创建我的根 UIViewColorPicker)并将其设置为 loadView() 中的 self.view

class ColorController: UIViewController {

    private let colorPicker: ColorPicker       

    init() {
        colorPicker = ColorPicker()
    }

    override func loadView() {
        self.view = colorPicker
    }

【问题讨论】:

    标签: ios uiviewcontroller uinavigationcontroller uinavigationbar


    【解决方案1】:

    不要覆盖loadView,覆盖viewDidLoad并添加colorPicker self.view

    使用 SnapKit

    colorPicker.snp.makeConstraints { (make) -> Void in
        make.leading.trailing.bottom.equalTo(0)
        make.top.equalTo(self.topLayoutGuide.snp.bottom);
    }
    

    使用 iOS UIKit

    colorPicker.translatesAutoresizingMaskIntoConstraints = false
    
    var constraints = [NSLayoutConstraint(item: colorPicker, attribute: .leading, relatedBy: .equal, toItem: self.view, attribute: .leading, multiplier: 1, constant: 0),
                               NSLayoutConstraint(item: colorPicker, attribute: .bottom, relatedBy: .equal, toItem: self.view, attribute: .bottom, multiplier: 1, constant: 0),
                               NSLayoutConstraint(item: colorPicker, attribute: .trailing, relatedBy: .equal, toItem: self.view, attribute: .trailing, multiplier: 1, constant: 0)]
    
    if #available(iOS 11.0, *) {
        constraints.append(NSLayoutConstraint(item: colorPicker, attribute: .top, relatedBy: .equal, toItem: self.view.safeAreaLayoutGuide, attribute: .top, multiplier: 1, constant: 0))
    } else {
        constraints.append(NSLayoutConstraint(item: colorPicker, attribute: .top, relatedBy: .equal, toItem: self.topLayoutGuide, attribute: .bottom, multiplier: 1, constant: 0))
    }
    self.view.addConstraints(constraints)
    

    【讨论】:

    • 这行得通。我可以接受答案,但如果您的示例代码使用 iOS API 而不是任何 3rd 方库,这可能会更好。
    • 酷,谢谢。现在使用 UIKit 有一种更方便的方法。例如,view.leadingArchor.constraintEqualTo(...) 和朋友。但答案中的方式适用于旧版本的 iOS。
    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多