iOS:转换时 LeftBarButtonItem 上的奇怪叠加
Posted
技术标签:
【中文标题】iOS:转换时 LeftBarButtonItem 上的奇怪叠加【英文标题】:iOS: Weird overlay on LeftBarButtonItem on Transition 【发布时间】:2018-06-29 13:46:20 【问题描述】:我在使用objective-c
的ios
项目中使用导航栏时遇到了一点问题。
我有一些由navigationviewcontroller
管理的视图控制器,其层次结构类似于 1-2-3。
对于Viewcontrollers
2 和3,我在viewWillAppear
函数中定义了自定义后退按钮,因为我需要在触摸它们时为其分配更复杂的逻辑。这就是我在前一个视图控制器中没有设置后退按钮的原因。
一切都像这样正常工作,我的唯一问题是,在从一个视图转换到另一个视图时,后退按钮的箭头被导航栏背景颜色颜色的小视图覆盖,直到高达 50%,然后在过渡完成后消失。
我用这个函数在导航栏中创建我的后退按钮,在viewWillAppear
中调用:
- (void)setupCustomBackButton:(NSString *)title
action:(SEL)action
buttonFrame:(CGRect)buttonFrame
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
backButton.frame = buttonFrame;
[backButton setImage:[UIImage imageNamed:@"backArrowOwn"] forState:UIControlStateNormal];
backButton.imageEdgeInsets = UIEdgeInsetsMake(0.0f, -8.0f, 0.0f, 0.0f);
[backButton setTitle:title forState:UIControlStateNormal];
[backButton.titleLabel setFont:[UIFont systemFontOfSize:17.0]];
backButton.titleEdgeInsets = UIEdgeInsetsMake(0.0f, -3.0f, 0.0f, 0.0f);
[backButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
[backButton addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = barButton;
我希望也许有人对我有一个好的提示!谢谢!
【问题讨论】:
【参考方案1】:尝试将自定义按钮初始化移动到 viewDidLoad 方法中。
【讨论】:
我已经尝试过了,但不幸的是它没有帮助。另外,例如,我在 iOS 10 上没有这些问题...【参考方案2】:经过长时间的尝试,我终于设法自己解决了这个问题。 所以基本上,当我创建一个 leftBarButton 时,按钮不会从左边距开始,但左边距有一些空间。当我现在用负插图插入我的按钮图像时,图像将基本上在我的按钮框架之外。然后这部分奇怪地覆盖在过渡上。
为了解决这个问题,我只需将另一个 UIBarButtonItem 添加到我的 leftBarButtonItems。这似乎为我解决了这个问题,虽然我真的不知道为什么。 另外,我认为导航栏中的 leftBarButton 并不完全从边距开始,而是在边距有一个空间,我必须插入我的图像才能获得与图像完全相同的位置,这很奇怪,因为默认后退按钮有。
我用于创建自定义后退按钮的新代码现在如下所示:
- (void)setupCustomBackButton:(NSString *)title
action:(SEL)action
buttonFrame:(CGRect)buttonFrame
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
backButton.frame = buttonFrame;
[backButton setImage:[UIImage imageNamed:@"customBackArrow"] forState:UIControlStateNormal];
backButton.imageEdgeInsets = UIEdgeInsetsMake(0.0f, -8.0f, 0.0f, 0.0f);
[backButton setTitle:title forState:UIControlStateNormal];
[backButton.titleLabel setFont:[UIFont systemFontOfSize:17.0]];
backButton.titleEdgeInsets = UIEdgeInsetsMake(0.0f, -3.0f, 0.0f, 0.0f);
[backButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
[backButton addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:backButton];
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
target:nil action:nil];
self.navigationItem.leftBarButtonItem = nil;
[self.navigationItem setLeftBarButtonItems:[NSArray arrayWithObjects:negativeSpacer,barButton, nil] animated:NO];
谢谢大家,希望我的回答也能对其他人有所帮助!
【讨论】:
以上是关于iOS:转换时 LeftBarButtonItem 上的奇怪叠加的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 leftBarButtonItem 在 iOS 11.4 上变得更小
[iOS类别的使用]---导航栏leftBarButtonItem图标修改
iOS 11 在 leftBarButtonItem 旁边的导航栏中显示 searchBar