iOS 11 - 如何更改 rightBarButtonItems 的位置?

Posted

技术标签:

【中文标题】iOS 11 - 如何更改 rightBarButtonItems 的位置?【英文标题】:iOS 11 - how to change the position of rightBarButtonItems? 【发布时间】:2017-12-12 16:31:15 【问题描述】:

ios 10 或更早版本的代码可以工作

UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeCustom];
[btn1 setTitle:@"yyyyy"  forState:UIControlStateNormal];
[btn1 setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[btn1 sizeToFit];
UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithCustomView:btn1];

UIBarButtonItem *fixed = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemFixedSpace target:nil action:nil];
fixed.width = -22;

self.navigationItem.rightBarButtonItems  = @[fixed, item1];

如果我想在 iOS 11 中做同样的事情,我该怎么做?

【问题讨论】:

您在运行 iOS 10 的 iPhone 7 Plus 中看到了什么?为什么宽度是负数? Negative spacer for UIBarButtonItem in navigation bar on iOS 11的可能重复 @rmaddy 因为代码'fixed.width = -22;' 是的,我看到了那个代码,这就是我问的原因。为什么将宽度设置为负值?这有什么作用?当您希望您的应用在带有 iOS 10 的 iPhone 7 Plus 模拟器上时发生了什么? @rmaddy 我想在 iOS10 中调整 'yyyy' barbutton 的位置,我可以做到这一点,所以我需要帮助才能在 iOS 11 中做到这一点。 【参考方案1】:

我们通过子类化 UINavigationBar 实现了这一点:

#import <UIKit/UIKit.h>

@interface InsetButtonsNavigationBar : UINavigationBar

@end

和设置 layoutMargins

#import "InsetButtonsNavigationBar.h"

@implementation InsetButtonsNavigationBar

- (void)layoutSubviews 

    [super layoutSubviews];

    for (UIView * view in self.subviews) 

        view.layoutMargins = UIEdgeInsetsMake(0, 8, 0, 8);

    



@end

【讨论】:

以上是关于iOS 11 - 如何更改 rightBarButtonItems 的位置?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式快速更改设备方向 4 IOS 11 [重复]

如何在 iOS 13 中更改状态栏 Alpha?

如何更改 iOS 模拟器 SDK [重复]

iOS 13 - UISegmentedControl - 如何更改 selectedSegment 的圆角半径?

如何在 iOS7 的 UIPopoverController 中更改导航栏背景/颜色?

如何更改 Game Center (iOS) 中的排行榜图标?