Элемент UIBarButton на краю экрана в iOS 8 при использовании в автономном режиме
В моей панели UINavigation, добавленной в XIB с несколькими UIView, позиционирование элемента кнопки влево и вправо отключено:
![Navigation bar in additiona UIView in XIB]()
Вид в XIB просто имеет выход к контроллеру представления, но не является основным видом. Он показан через:
[UIView transitionFromView:self.view toView:self.settingsView duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL];
У меня есть еще одно упрощенное представление, которое напрямую связано с свойством view контроллера вида, который, как и ожидалось, выглядит просто нормальным.
![Normal navigation bar]()
Все представления имеют автоматическую компоновку. Ограничения прекрасны. Я пробовал несколько разных вещей, но не мог придумать исправление (или причину, если на то пошло). Навигационная панель и элементы - это просто элементы кнопки с баранинами без каких-либо прокси-адресов и т.д.
В 7.1-симу все выглядит нормально.
Кто-нибудь видел это раньше?
Спасибо
[EDIT]
Я нашел решение, но не причина:
Если я вместо
[UIView transitionFromView:self.view toView:self.settingsView duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL];
который добавляет новое представление как подпункт UIWindow,
используйте это:
[UIView transitionWithView:self.view duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
[self.view addSubview:self.settingsView];
} completion:nil];
который добавляет новое представление в качестве подсмотра существующего представления UIViewControllers, все в порядке.
Интересно, выглядит ли это ошибка и UINavigationBars странным образом, если она содержится в представлении, динамически добавленном в окно...
Ответы
Ответ 1
Не уверен, что происходит с UIBarButtonItem
. Он должен быть организован по автоматическому расположению, и он должен хорошо работать. Может быть одним из ограничений конфликта с другими или ошибочными.
Если вы не можете его решить. У меня есть еще одно решение для вас. Вам необходимо создать UIBarButtonItem
программно в вашем VC.
Идея состоит в том, чтобы назначить пространство слева и справа, прежде чем добавить UIBarButtonItem
.
Ниже код поможет вам сделать трюк.
UIBarButtonItem *leftPadding = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:
UIBarButtonSystemItemFixedSpace target:self action:nil];
[leftPadding setWidth:5]; // Adjust width for padding from left side.
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:
UIBarButtonSystemItemAdd target:self action:@selector(addButtonTapped:)];
[self.navigationItem setLeftBarButtonItems:@[leftPadding, addButton]];
UIBarButtonItem *rightPadding = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:
UIBarButtonSystemItemFixedSpace target:self action:nil];
[rightPadding setWidth:10]; // Adjust width for padding from right side.
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:
UIBarButtonSystemItemDone target:self action:@selector(doneButtonTapped:)];
[self.navigationItem setRightBarButtonItems:@[rightPadding, doneButton]];
Ответ 2
Добавить кнопку, используя приведенный ниже код, это определенно будет работать.
CGRect frameimg = CGRectMake(0, 0, 60, 30);
UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg];
//[someButton setBackgroundImage:image3 forState:UIControlStateNormal];
[someButton setTitle:@"Update" forState:UIControlStateNormal];
[someButton addTarget:self action:@selector(updateProfile)
forControlEvents:UIControlEventTouchUpInside];
[someButton setShowsTouchWhenHighlighted:YES];
UIBarButtonItem *menuButton =[[UIBarButtonItem alloc] initWithCustomView:someButton];
self.navigationItem.rightBarButtonItem = menuButton;
Ответ 3
Проблема заключается в layoutMargins.
Кажется, что ваш UINavigationBar
имеет нулевой запас.
Он должен иметь по 8 баллов с каждой стороны.