UIBarButtonItems сдвигает позицию, когда UINavigationController представляется модально
Я представляю UINavigationController
модально, из расширения приложения iOS:
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
nav.modalPresentationStyle = UIModalPresentationFormSheet;
nav.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:nav animated:YES completion:nil];
Когда появится контроллер навигации, его контроллер корневого представления UIBarButtonItems
положение перехода:
![Jumping buttons]()
Я создаю и добавляю кнопки в viewDidLoad
. Это обычные элементы панели инструментов:
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)];
Я не переопределяю viewDidAppear
(который, как представляется, является точкой, где переключаются кнопки).
Представление этого же контроллера навигации/контроллера корневого каталога из моего приложения вместо расширения приложения не дает мне этой же проблемы. Любые идеи?
Ответы
Ответ 1
Я надеюсь, что кто-то найдет лучший способ сделать это, но мое текущее решение - создать автономные кнопки, а затем использовать [[UIBarButtonItem alloc] initWithCustomView:]
с помощью кнопки. Не идеально, и отступление все еще есть, но странный прыжок больше не случается.
Если отступы вас беспокоят, вы также можете установить отрицательные фиксированные пространства на внешних сторонах кнопок, чтобы сместить их ближе к краям.
Здесь пример, содержащий разделитель:
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
<other button config here, set targets, whatever>
[button sizeToFit];
UIBarButtonItem *leftBarButton = [[UIBarButtonItem alloc] initWithCustomView:button];
UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
[fixedSpace setWidth:-8.0f];
self.navigationItem.leftBarButtonItems = @[fixedSpace, leftBarButton];
Это происходит только со мной в моем расширении share, и у меня нет никаких проблем, связанных с представлением от отдельного контроллера или чего-то подобного.
Ответ 2
Как упоминалось в @Stonz2, это, по-видимому, является характеристикой представления модальности от отдельного контроллера представления. У меня была такая же проблема, и я исправил ее, переустановив мое приложение, чтобы оно не представлялось от отдельного контроллера.
Вы узнаете, если вы представляете отсоединенный контроллер, если появляется следующее сообщение об ошибке:
Представление контроллеров представлений на отдельных контроллерах просмотра не рекомендуется
Ответ 3
Я представлял из отдельного viewController. Я не получил предупреждения. Но я попытался внедрить этот независимый viewController в NavigationController, и проблема исчезла.