UINavigationBar 左边距

UINavigationBar left margin

在 iPhone 6+ 上,当您添加自定义左栏按钮项目时,UINavigationBars 看起来有 20pt 的左边距。在其他设备上是 16pt。

没关系,在更宽的屏幕设备上可能有助于让该按钮触手可及:)

我正在尝试将我的 UI 对齐到其下方(这是菜单项的 table 视图),但事实证明这很棘手。

有没有办法以编程方式获得该边距,以便我可以在 UI 的其他地方使用该值。

像这样的东西是理想的:

CGFloat padding = self.navigationBar.leftMargin;

但显然不存在:(

有什么建议吗?

iOS 8介绍布局边距的概念。每个视图(UIView 及其子classes)都包含一个 layoutMargins 属性,这将为您提供您想要的内容。

此外,您可以使用 layoutMarginsDidChange 来监听边距的变化以对边距变化做出反应。此方法也在初始布局后调用,因此您可以在此处做出反应并根据系统提供的边距适当地布局您的视图。这是首选,因为根据设备的不同,当尺寸 class 更改时边距可能会更改(例如 iPhone 6 Plus 旋转)。这样,您的视图将始终使用正确的边距显示。

阅读 here 了解有关版面边距的更多信息。

您可以获得 UINavigationBar.

的子视图

然后你可以迭代一个循环来找到你的自定义视图。使用该视图,您可以找到它的位置。喜欢,

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[Your Custom View Class]];

    for(id object in self.navigationController.navigationBar.subviews){
        if([object isKindOfClass:[Your Custom View Class]]){
            UIView *item = (UIView *)object;
            NSLog(@"%f",item.frame.origin.x);
        }
    }

希望对你有帮助..

简单的方法

let leftMargin = self.navigationController?.systemMinimumLayoutMargins.leading