iOS: странное наложение на LeftBarButtonItem при переходе - PullRequest
0 голосов
/ 29 июня 2018

У меня небольшая проблема с использованием панели навигации в проекте iOS с использованием objective-c.

У меня есть несколько контроллеров представления, которые управляются 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;
}

Я надеюсь, что, возможно, у кого-то есть хорошая подсказка для меня! Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

После долгих попыток мне наконец-то удалось решить проблему самостоятельно. Таким образом, в основном, когда я создаю leftBarButton, кнопка не начинается с левого поля, но имеет некоторое пространство до левого поля. Когда я теперь вставлю свое изображение кнопки с отрицательным вкладом, изображение будет в основном вне моей рамки кнопки. Затем эта часть странным образом накладывается на переход.

Чтобы это исправить, я просто добавляю еще один UIBarButtonItem дополнительно к моим leftBarButtonItem. Это, кажется, решает проблему для меня, хотя я действительно не знаю почему именно. Кроме того, я думаю, что это странно, что 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];
}

Спасибо всем, и я надеюсь, что мой ответ поможет кому-то еще!

0 голосов
/ 29 июня 2018

Попробуйте переместить инициализацию пользовательской кнопки в метод viewDidLoad.

...