2

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

    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)

模拟器快照(横向)

在此处输入图像描述

模拟器快照(纵向)

在此处输入图像描述

4

1 回答 1

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

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

在此处输入图像描述

如果这些方法中的任何一个都不起作用,默认情况下,您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
        }
}
于 2016-05-27T15:37:10.523 回答