CGRect cgRect1 = [[UIScreen mainScreen] applicationFrame];
UISearchBar *mySearchBar = [[UISearchBar alloc]
initWithFrame:CGRectMake(0, 0, cgRect.size.width, 40)];
mySearchBar.autoresizingMask =
UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight ;
UITableView *myTableView = [[UITableView alloc]
initWithFrame:CGRectMake(0, 40, cgRect.size.width, cgRect.size.height-40)];
myTableView.autoresizingMask =
UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
[self.view addSubview:mySearchBar];
[self.view addSubview:myTableView];
В более ранних версиях он работает правильно. Панель поиска появится под statusbar
панелью навигации и. tableview
Появляется под панелью поиска
Но когда я запускаю это Xcode 5 sdk iOS 7
, панель поиска не отображается (я думаю, что она находится под строкой состояния и панелью навигации), а также панель навигации появляется над представлением таблицы.
Будет ли это исправлено в iOS 7
стабильной версии?
Или это проблема моей кодировки?
Или мы должны справиться с этим, добавив (y = statubar height + nav bar height)
значение y для iOS 7
?
Недавно я загрузил Xcode 5 DP, чтобы протестировать свои приложения в iOS 7. Первое, что я заметил и подтвердил, - это то, что границы моего представления не всегда меняются с учетом строки состояния и панели навигации.
В viewDidLayoutSubviews я печатаю границы представления:
{{0, 0}, {320, 568}}
В результате мой контент отображается под панелью навигации и строкой состояния.
Я знаю, что могу учесть высоту самостоятельно, получив высоту основного экрана, вычтя высоту строки состояния и высоту панели навигации, но это кажется ненужной дополнительной работой.
Кто-нибудь еще сталкивался с этой проблемой?
ОБНОВИТЬ:
Я нашел решение этой конкретной проблемы. Установите для свойства полупрозрачности панели навигации значение NO:
self.navigationController.navigationBar.translucent = NO;
Это исправит то, что представление не будет заключено в рамку под панелью навигации и строкой состояния.
Однако я не нашел исправления для случая, когда вы хотите, чтобы панель навигации была полупрозрачной. Например, просматривая фотографию в полноэкранном режиме, я хочу, чтобы панель навигации была полупрозрачной, а вид располагался под ней. Это работает, но когда я переключаю отображение / скрытие панели навигации, я получаю еще более странные результаты. Границы первого подвида (a UIScrollView
) меняются каждый раз.
Ответы:
Это не совсем так. В iOS 7 появилось новое свойство, которое позволяет настраивать поведение макета, как и в предыдущих версиях iOS. Поместите этот фрагмент кода в контроллер представления, и все будет в порядке! Место, которое занимает панель навигации, должно учитываться автоматически.
Вам нужно добавить это в свой
-(void)viewDidLoad
метод.Примечание: вы должны использовать последнюю версию GM iOS 7 и Xcode 5, так как API изменился с бета-версий.
источник
Если вы работаете в Storyboard (что я настоятельно рекомендую!), Вот решение: вы можете отключить «Extend Edges» вашего ViewController в раскадровке. Вы должны сделать это для каждого viewController. Вы можете отключить расширенные края, щелкнув значок viewController на панели инструментов (помимо productOwner под самим представлением), а затем выбрав инспектор атрибутов (как показано на изображениях).
Это также установит линии выравнивания, как в iOS 6.
Еще один отличный инструмент в xCode 5 - «Предварительный просмотр»: нажмите кнопку дворецкого (помощник редактора) и выберите «Предварительный просмотр». там вы можете выбрать iOS 6 и посмотреть, как ваш дизайн раскадровки будет выглядеть на iOS 6.
Это просто здорово: D
[Обновить]
Будьте осторожны: отключение «Расширить края» может привести к черному свечению на панели навигации, когда приложение переходит в фоновый режим на iOS7. свечение также будет видно в режиме многозадачности (дважды нажмите кнопку «Домой»). это можно решить, установив белый цвет фона панели навигации.
источник
Как сказано в OP, есть простое решение - сделать панель навигации непрозрачной. Вместо того, чтобы делать это в коде, просто снимите галочку с "Translucent" для корневой панели навигации:
источник
self.edgesForExtendedLayout=UIRectEdgeNone;
Работает на симуляторе iOS 7 (Xcode 5 DP5)
источник
if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
все эти ответы были полезны, особенно MQoder, но мне также пришлось установить верхнюю панель по умолчанию на «непрозрачную черную навигацию».
источник
Ответ @One Man Crew правильный, но:
Я бы рекомендовал использовать этот код, чтобы избежать ошибок при запуске приложения на старых версиях:
источник
И вам нужно сделать это в AppDelegate # application: didFinishLaunchingWithOptions:
В противном случае цвет фона панели навигации изменится на серый. Потому что прозрачная панель навигации перекрывает окно.
источник
Если вы хотите сохранить прозрачность, когда пользователь прокручивает представление таблицы, вы можете установить для него contentInset:
источник
Одно из решений - использовать контроллер навигации. Это автоматически решит проблему. Также используйте Xcode 5 вместо версий Xcode Preview, поскольку они являются бета-версиями.
источник