iOS 7 UINavigationBar - проблема с макетом UIView
Есть проблемы с макетами.
Вот как это выглядит прямо на iOS6:
Вот как выглядит на iOS7:
Но это нормально. И, как описано в iOS7 TransitionGuide от Apple, я написал еще один штрих в - (void)viewDidLoad
self.edgesForExtendedLayout = UIRectEdgeNone;
И вот теперь это выглядит так:
Какие-либо предложения? Что может быть не так с моими раскладками? Я хочу сплошной синий UINavigationBar. И понятия не имею, почему вершина этого прозрачна. Есть идеи, почему это выглядит так странно? Как я могу это исправить?
3 ответа
Пытаться navigationBar.translucent = NO;
это YES
по умолчанию.
От UINavigationBar
документация:
Новое поведение на iOS 7. По умолчанию YES. Вы можете настроить непрозрачный фон, установив для свойства значение NO. Если у панели навигации есть пользовательское фоновое изображение, значение по умолчанию выводится из альфа-значений изображения - ДА, если у него есть какой-либо пиксель с альфа< 1.0. Если вы отправите setTranslucent:YES на панель с непрозрачным пользовательским фоновым изображением, к которому будет применяться непрозрачность системы менее 1,0 для изображения. Если вы отправите setTranslucent:NO на панель с полупрозрачным настраиваемым фоновым изображением, он предоставит непрозрачный фон для изображения, используя бар barTintColor, если он определен, или черный для UIBarStyleBlack или белый для UIBarStyleDefault, если barTintColor равен нулю.
Добавьте эту строку в ваш метод view view (если его там нет, добавьте его, набрав:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animate];
}
)
Затем в нижней части viewWillAppear под строкой [self viewWillAppear:] добавьте этот код:
if([self respondsToSelector:@selector(edgesForExtendedLayout)])
[self setEdgesForExtendedLayout:UIRectEdgeBottom];
Это сделает верхнюю панель (панель навигации) непрозрачной. В iOS 7 Obj-C теперь по-разному реагирует на то, была ли навигационная панель установлена на непрозрачную, и это хороший способ гарантировать, что она работает как в iOS 6, так и в 7 (есть некоторые проблемы, возникающие только:
navigationBar.translucent = NO;
)
Надеюсь, это поможет, у меня была такая же проблема, когда я конвертировал приложение в iOS 7, и потребовались годы, чтобы найти решение!
В IOS7 стиль UINavigationBar по умолчанию прозрачный, поэтому он будет скрывать представление "Контент под", чтобы показать ваш контент. Под панелью "UInavigation" запишите следующий фрагмент в данном методе.
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if([self respondsToSelector:@selector(edgesForExtendedLayout)])
[self setEdgesForExtendedLayout:UIRectEdgeBottom];
}