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

Просмотр контейнера сбрасывается, как будто у него есть UINavigationBar?

У меня есть UIViewController с представлением контейнера. Этот вид контейнера содержит UITableViewController.

UIViewController встроен в UINavigationController. Я настраиваю NavigationBar, меняя цвет оттенка, цвет оттенка штриха и атрибуты текста заголовка, но когда я пытаюсь изменить прозрачность, у меня есть проблема. Я выделил проблему, удалив все другие коды настройки. Всякий раз, когда я делаю это в UIViewController -viewDidLoad:

self.navigationController.navigationBar.translucent = NO;

Container View добавляет некоторое пространство поверх себя, как будто он имеет собственную панель навигации. Всякий раз, когда я устанавливаю прозрачность в YES, вид отображает все правильно. Это происходит только в замкнутом представлении всякий раз, когда я устанавливаю полупрозрачное значение NO.

Есть ли что-то, что мне здесь не хватает?

Я попытался установить прозрачность на YES в содержащемся представлении, а также установить его в скрытое, но ничего не получилось. Является ли каким-то образом скрытый вид, наследующий свойства от родительского контейнера? Как избежать этого лишнего пространства, созданного на скрытом представлении, когда я устанавливаю прозрачность на NO?

Я ожидал бы, что настройка прозрачности влияет только на прозрачность, но не на положение представлений.

Когда полупрозрачный = ДА

+---------------------------------+
|                                 |
|     UINavigationBar             |
|                                 |
+---------------------------------+
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|    UITableViewController        |
|    in a Contained View          |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
+---------------------------------+

при полупрозрачности = NO

+---------------------------------+
|                                 |
|     UINavigationBar             |
|                                 |
+---------------------------------+
|                                 |
|blank space created on top of view
|                                 |
+---------------------------------+
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|                                 |
|     UITableViewController       |
|     in a Contained View         |
|                                 |
+---------------------------------+

P.S. Мой взгляд более сложный, чем это, я просто хочу.

4b9b3361

Ответ 1

Что вам не хватает, так это то, что полупрозрачная панель навигации располагается поверх представления viewcontroller, в то время как непрозрачная панель навигации отбрасывает вид вашего контроллера представления (фактически изменяя его размер).

Итак, что происходит здесь, так это то, что с прозрачной навигационной панелью это белое пространство фактически скрыто под полосой, а когда полоска не просвечивается, она "толкается".

Существует несколько способов сделать это, и в основном это зависит от того, используете ли вы автоматический макет или нет.

Ответ 2

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

(Это не относится в полной мере к этому вопросу, но когда я искал проблему, в основном возник только этот вопрос, и, возможно, информация помогает другим с той же проблемой.)


Подробности:

Чтобы перейти к панели навигации в редакторе раскадровки: покажите схему документа (редактор меню → Показать структуру документа), выберите панель навигации.

Navigation Bar in Document Outline

Затем в панели "Утилиты" справа в инспекторе "Атрибуты" убедитесь, что "Прозрачный" не установлен.

Translucent Propterty

Если это не помогает, откройте файл раскадровки в TextEdit, найдите элемент navigationBar и проверьте атрибуты opaque или translucent. Вы хотите translucent="NO".

StoryBoard Source

(Чтобы открыть источник раскадровки: в Xcode в навигаторе проектов щелкните правой кнопкой мыши файл раскадровки. Выберите "Показать в Finder" и в окне Finder, щелкните правой кнопкой мыши на файле и выберите "Open with..." и выберите TextEdit.)

EDIT: (Я не знаю, было ли это все время, но можно щелкнуть правой кнопкой мыши файл раскадровки в навигаторе проекта и выбрать "Открыть как" → "Исходный код". Не нужно идти в Finder.)

Ответ 3

Я исправил эту проблему следующим методом добавьте эту строку кода в viewDidLoad

  • self.extendedLayoutIncludesOpaqueBars = YES;

Снимок экрана

Ответ 4

Я исправил эту проблему, перейдя в IB > Выберите вид > Снять выделение "Отрегулировать вставки прокрутки"

Ответ 5

Это происходит исключительно из-за проблем с авто макетом, может быть, вы скрываете некоторые взгляды при запуске, просто показываете все представления и проверяете, осталось ли место там

Ответ 6

Как и в iOS 7.0, все представления автоматически заходят за панели навигации, панели инструментов и панели вкладок, чтобы обеспечить то, что Apple называет "контекстом" - имея некоторое представление о том, что под пользовательским интерфейсом (хотя и размыто с эффектом матового стекла) дает пользователям идея того, что еще находится за пределами экрана.

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

Например, если вы не хотите, чтобы контроллер просмотра заходил за любые столбцы, используйте это:

edgesForExtendedLayout = []

Доступно с iOS 7.0

Источник

Ответ 7

настройка tableView.opaque = false работала для меня