Подтвердить что ты не робот

IOS 7 UINavigationBar - проблема размещения UIView

У вас проблема с макетами.

Вот как это выглядит правильно на iOS6:

enter image description here

Вот как выглядит iOS7:

enter image description here

Но это нормально. И как описано в Apple iOS7 TransitionGuide Я написал еще один штрих в - (void)viewDidLoad

        self.edgesForExtendedLayout = UIRectEdgeNone;

И теперь он выглядит так:

enter image description here

Любые предложения? Что может быть неправильно с моими макетами?  Я хочу сплошной синий UINavigationBar. И понятия не имею, почему это прозрачно. Есть идеи, почему это выглядит так странно? Как я могу это исправить?

4b9b3361

Ответ 1

Попробуйте navigationBar.translucent = NO;

По умолчанию это YES.

Из документации UINavigationBar:

Новое поведение в iOS 7. Значение по умолчанию - YES. Вы можете заставить непрозрачный фона, установив для свойства значение NO. Если на панели навигации есть пользовательское фоновое изображение, значение по умолчанию выводится из альфа значения изображения-YES, если он имеет какой-либо пиксель с альфа- 1.0 Если вы отправить setTranslucent: ДА на панель с непрозрачным пользовательским фоном image он будет применять непрозрачность системы менее 1,0 к изображению. Если вы отправляете setTranslucent: NO на панель с полупрозрачным пользовательским фоновое изображение предоставит непрозрачный фон для изображения используя бар barTintColor, если он определен, или черный для UIBarStyleBlack или белый для UIBarStyleDefault, если barTintColor равен нулю.

Ответ 2

Добавьте эту строку в свой метод "view will see" (если его там нет, добавьте его, набрав:

- (void)viewWillAppear:(BOOL)animated
{

    [super viewWillAppear:animate];

}

)

Затем, в нижней части viewWillAppear, под линией [self viewWillAppear:] добавьте этот код:

if([self respondsToSelector:@selector(edgesForExtendedLayout)])
    [self setEdgesForExtendedLayout:UIRectEdgeBottom];

Это сделает верхнюю панель (навигационная панель) непрозрачной. В iOS 7 Obj-C теперь реагирует по-разному, независимо от того, была ли панель навигации непрозрачной, и это хороший способ для gaurentee, он работает как в iOS 6, так и 7 (есть некоторые проблемы, выполняющие только:

navigationBar.translucent = NO;

)

Надеюсь, что это поможет, у меня была та же проблема, когда я преобразовал приложение в iOS 7, и для поиска решения понадобилось много времени!

Ответ 3

В IOS7 стиль UINavigationBar является прозрачным по умолчанию, поэтому он будет скрывать представление Content Underneath, чтобы показать ваш контент. В панели UInavigation записывайте следующий фрагмент в данном методе.

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if([self respondsToSelector:@selector(edgesForExtendedLayout)])
        [self setEdgesForExtendedLayout:UIRectEdgeBottom];
}