【问题标题】:Change width/height UINavigationBar embedded in a Navigation Controller?更改嵌入在导航控制器中的宽度/高度 UINavigationBar?
【发布时间】:2017-01-13 13:54:11
【问题描述】:

约束可以分配给手动添加到视图的UINavigationBar

但是当 UINavigationBar 被添加到视图中并且视图嵌入到导航控制器中时,我无法向其添加约束。

我的目标是增加 UINavigationBar

的高度

【问题讨论】:

    标签: ios swift uinavigationcontroller uinavigationbar uinavigationitem


    【解决方案1】:

    UINavigationBar 不允许为自身分配约束。更改高度的唯一简单方法是在 prompt 属性中添加一个空格。

    增加UINavigationBar的高度有两个步骤:

    1. 子类 UINavigationBar 类并覆盖为 UINavigationBar 提供高度的方法,此后需要将该类分配给 NavBar 导航控制器的strong>

    注意:该特定导航控制器下的所有视图都将具有新高度

    代码片段:

    class ModifiedNavBar: UINavigationBar {
    
    override func sizeThatFits(size: CGSize) -> CGSize {
    
    let screenWidth =  UIScreen.mainScreen().bounds.width
    
        let newSize:CGSize = CGSizeMake(screenWidth, 60)
    
        return newSize
       }
    
      }
    

    注意:上述步骤会增加 NavBar 的高度,但不会为您提供完整的自定义选项。添加视图可以让您完全控制它。

    1. 以编程方式创建 view,然后将其添加到 UINavigationItem (titleView) Outlet:

    代码片段:

    class ViewController: UIViewController {
    
    /*** UINavigationItem Outlet ***/
    @IBOutlet weak var navbar: UINavigationItem!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        super.viewDidLoad()
    
        let view = UIView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 90))
        let label = UILabel(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 20))
        let label2 = UILabel(frame: CGRectMake(0, 20, UIScreen.mainScreen().bounds.width, 20))
    
        /*** First Label ***/
        label.text = "Hello"
        label.textAlignment = NSTextAlignment.Left
        view.addSubview(label)
    
        /***Second Label ***/
        label2.text = "Hello2"
        label2.textAlignment = NSTextAlignment.Left
        view.addSubview(label2)
    
        self.navbar.titleView = view
    }
    

    注意:如果将 prompt 添加到任何 UINavigationItem 对象,NavBar 的大小将会增加

    【讨论】:

    • sizeThatFits:不再适用于 iOS11 UINavigationBar 子类。 Apple Engineering 已确认该技术从未受到支持,并且随着 iOS11 的更改 sizeThatFits: 不再被咨询。
    猜你喜欢
    • 2017-09-19
    • 2010-10-28
    • 2012-06-14
    • 2018-09-08
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多