更改宽度/高度UINavigationBar嵌入在导航控制器中?

时间:2016-09-06 07:48:10

标签: ios swift uinavigationcontroller uinavigationbar uinavigationitem

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

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

我的目标是增加 UINavigationBar

的高度

1 个答案:

答案 0 :(得分:2)

UINavigationBar 不允许为自己分配约束。高度可以更改的唯一简单方法是在提示属性中添加空格。

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

  1. UINavigationBar 类进行子类化并覆盖赋予 UINavigationBar 高度的方法,此后需要将此类分配给 NavBar 导航控制器
  2. 注意:该特定导航控制器下的所有视图都将具有新的高度

    代码段:

    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. 以编程方式创建视图,然后将其添加到 UINavigationItem (titleView)插座:
    2. 代码段:

      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
      }
      
        

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