iOS导航项目在横向模式下额外填充顶部的问题

时间:2016-05-27 15:19:23

标签: ios swift navigationbar navigationitem

当我的应用程序在横向时有额外的填充顶部。 以编程方式创建导航栏时,这是我的代码。 在横向模式下删除填充顶部的任何建议吗?

    let navigationBar = UINavigationBar(frame: CGRectMake(0, 0, self.view.frame.size.width, 44)

    navigationBar.backgroundColor = UIColor.redColor()
    navigationBar.delegate = self;

    let navigationItem = UINavigationItem()
    navigationItem.title = "Title"

    let btnLeft = UIButton(frame: CGRectMake(0, 0, 44, 44))
    btnLeft.setImage(UIImage(named: “myImage.png"), forState: .Normal)

    let leftButton =  UIBarButtonItem()
    leftButton.customView = btnLeft

    navigationItem.leftBarButtonItem = leftButton

    navigationBar.items = [navigationItem]

    self.view.addSubview(navigationBar)

来自模拟器的快照(风景)

enter image description here

模拟器快照(人像)

enter image description here

1 个答案:

答案 0 :(得分:0)

您应该轻松解决此设置(例如,在viewDidLoad中):

self.edgesForExtendedLayout = UIRectEdge.None

替代方法:您也可以将其放在UINavigationController委托方法中(如果您已在班级中设置了导航委托UINavigationControllerDelegate),则称为willShowViewController

func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
    viewController.edgesForExtendedLayout = UIRectEdge.None
}

如果您使用UITableView,您也可以这样做:

 self.automaticallyAdjustsScrollViewInsets = false

您也可以直接编辑属性检查器:

enter image description here

如果这些方法中的任何一种都不起作用,默认情况下,UINavigationBar根据您的方向有不同的高度。例如,导航栏为纵向44点,横向为32点。 解决方法可以是:

// Create an IBOutlet of your navigationBar height constraint
@IBOutlet weak var navBarHeight: NSLayoutConstraint

override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        if self.view.bounds.size.height > self.view.bounds.size.width {
            self.navBarHeight.constant = 44
        } else {
            self.navBarHeight.constant = 32
        }
}