Элемент 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 баллов с каждой стороны.