2013-09-13 2 views
5

EDIT: Это не проблема с фреймом. Рамка находится в правильном месте. Это содержимое отключено. Да, мы компенсируем четкую строку состояния. ViewDidLoad показывает, что смещение содержимого равно 0,0.ios7 все поисковые запросы и таблицы просмотров на 20 пикселей

На каждой странице моего приложения, у которого есть прокрутка, содержимое помещается на 20 пикселей. Я думаю, что это может иметь какое-то отношение к новому StatusBar или его отсутствию. Кажется, что ошибка присутствует в меню настроек симуляторов. Снимок экрана ниже. Это только влияет на первое представление прокрутки, которое добавляется в ViewController, и только в том случае, если к нему не добавлены другие представления. Представления таблицы также затрагиваются, поскольку они наследуются от представления прокрутки. Чтобы быть ясным, scrollview начинается с правильного начала, но контент сбрасывается на 20 пикселей. Это странно, потому что я думаю, что если бы это была проблема с баром состояния, это было бы на 20 пикселей выше, не ниже.

В настоящее время мы фиксируем его, добавив в наш базовый вид контроллера

UIView *hackView = [[UIView alloc] init]; 
hackView.frame = CGRectMake(0, 0, 0, 0); 
[self.view addSubview:hackView]; 

Очевидно, что это хак.

То же самое происходит на телефоне и в симуляторе даже с версией IOS7 для Gold Member при создании для последней версии IOS7. Вы даже можете увидеть пример ошибки в таблице настроек симулятора, а также ниже.

enter image description here

IOS7 settings

Это скриншот сразу же после того, как он загружает. Одна странная вещь, которую мы заметили, заключается в том, что когда мы выполняем pull для обновления, она будет корректировать scrollview и отдыхать в правильном месте. В качестве альтернативы, если мы компенсируем это будет выглядеть правильно в начале, но любое последующее вытягивание до обновления перенесет прокрутку в -20px

ответ

2

Как вы изложите свои взгляды? С автозапуском вы можете использовать topLayoutGuide, который должен учитывать эти смещения.

+0

Все в коде и мы вычисляем все рукой. Мы еще не переключились на AutoLayout. Будет ли автоматическая компоновка влиять на контент? Из моего понимания (я мог ошибаться), который просто повлияет на структуру контейнера, а не на контент. –

+1

Я не знаю. У меня были аналогичные проблемы, которые я разрешил, используя автоматическую компоновку с 'topLayoutGuide'. Сожалею. – czechboy

+0

Не нужно жалеть. Я просто выражал свою озабоченность. В любом случае мне понадобится реализовать автоматическую компоновку в тот момент, когда я пытаюсь избежать этого, потому что это большой ремонт кода. (Все наши представления сделаны в коде, и у нас есть большие проблемы), если это решение, я обязательно буду вам благодарен. –

0

В Ios 7 вид начинается с окна от у = 0, переместите ваш взгляд на 20 пикселя DOWM

self.view.frame = CGRectmake (0,20,320,hight); 

это связанно с прозрачной панелью состояния в прошивке 7.

тянуть вниз чтобы показать его должным образом.

+0

Это не проблема. Мы компенсируем это. Рамка находится в правильном месте. это содержимое в представлении прокрутки, которое не является. –

3

После дополнительного тестирования в Xcode мое первоначальное временное решение все еще работает, но настоящим преступником представляется контроллер навигации в сочетании с надписью «Настроить прокрутку» в контроллере представления. Отключение этого решения проблемы.

[self setAutomaticallyAdjustsScrollViewInsets:NO]; 

Оригинал обходной путь: Попробуйте переназначения иерархию вида или добавить пустой вид сверху.

Это случилось со мной, и кажется, что когда UIScrollView или подобный подкласс сначала в иерархии, он получает смещение на 20 пикселей (чтобы он не попадал в строку состояния). Однако это все еще происходит, даже когда рассматриваемое представление нигде не находится сверху.

Это воспроизводимо в интерфейсе Builder, и для меня было непростым обходным путем было изменить порядок моих представлений, чтобы метка или кнопка были сначала под представлением контроллера.Если это невозможно в вашем случае, добавление пустого представления (даже вне экрана) над вашим scrollview также, похоже, решает проблему.

+0

Хороший ответ, но попробуйте добавить несколько строк кода, чтобы продемонстрировать ваш подход. Всегда оценивается – legrandviking

+1

setAutomaticallyAdjustsScrollViewInsets также доступен в построителе интерфейса. – Tylerc230

3

Я добавил это в моих UIViewControllers в viewDidLoad:, которые были затронуты и исправили проблему для меня:

NSComparisonResult order = [[UIDevice currentDevice].systemVersion compare: @"7.0" options: NSNumericSearch]; 
if (order == NSOrderedSame || order == NSOrderedDescending) 
{ 
    // OS version >= 7.0 
    self.edgesForExtendedLayout = UIRectEdgeNone; 
} 

Другой, уборщик метод:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) 
    self.edgesForExtendedLayout = UIRectEdgeNone; 
+0

Попробуй это, когда я получу в офисе завтра. Если он решит мою проблему, я дам вам знать. Спасибо за ответ! Вы видели какие-либо негативные последствия для добавления его в представления, которые не были затронуты? У меня есть базовый класс View, который я использую. Я думаю, просто добавив его там, чтобы применить исправление ко всем моим взглядам независимо от того, была ли у них проблема. –

+0

Я добавил это на свою вкладку UIViewControllers, а также несколько модальных UIViewControllers, и я вообще не видел никаких негативных эффектов. – RyanG

Смежные вопросы