【问题标题】:iOS: Weird overlay on LeftBarButtonItem on TransitioniOS:转换时 LeftBarButtonItem 上的奇怪叠加
【发布时间】:2018-06-29 13:46:20
【问题描述】:

我在使用objective-ciOS 项目中使用导航栏时遇到了一点问题。

我有一些由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;
}

我希望也许有人对我有一个好的提示!谢谢!

【问题讨论】:

    标签: ios objective-c xcode uinavigationcontroller uibutton


    【解决方案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];
    }
    

    谢谢大家,希望我的回答也能对其他人有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 2015-03-25
      相关资源
      最近更新 更多