Панель навигации имеет минимальные поля между элементами, которые она применяет, и поэтому вы не можете избавиться от полей.
Объяснить ваш конкретный код тоже не сложно: 115+100+50 = 265
и ширинаэкрана 320, поэтому панель навигации имеет 55 пикселей для использования в качестве полей.Левый элемент выровнен по левому краю, правый элемент выровнен по правому краю, а средний элемент - по центру.Таким образом, поля, которые вы получаете в портрете, имеют смысл.
То, что вы видите в ландшафте, обусловлено вашей гибкой шириной.У вас не должно быть гибкой ширины для элементов на панели навигации, поэтому поведение при этом не определено, т. Е. Ошибка в том, как вы используете панель навигации, а не в самой панели навигации.
То, что происходит, - то, что новый размер для правильного пункта вычислен сначала.Вырастает от 100 до 100+(480-320) = 260
.Затем вычисляется размер среднего элемента, и кажется, что он просто берет все доступные ему размеры.Когда пришло время вычислить левый элемент, он фактически сжимается, поскольку правый и средний элемент заняли все пространство, поэтому, когда на панели навигации устанавливаются поля, пиксели берутся из левого элемента.
ФактическийАлгоритм может отличаться.В конце концов, это закрытый исходный код, и я пытаюсь объяснить неопределенное поведение, но, глядя на производимые поля, которые, кажется, и происходят.
В любом случае, ваше приложение никогда не должно полагаться на неопределенное поведение, как неопределенное поведение.может меняться между версиями и сломать его.Что вы должны сделать, это создать свой собственный вид и добавить его в качестве подпредставления панели навигации.Тогда вы будете обрабатывать поля в своем представлении так, как вы хотите.
yourView = [[YourView alloc] initWithFrame:(UIInterfaceOrientationIsPortrait(interfaceOrientation)) ? CGRectMake(0, 0, 320, 44) : CGRectMake(0, 0, 480, 44)];
yourView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[self.navigationController.navigationBar addSubview:yourView];