#ios #swift #xcode #uiview #uipageviewcontroller
#iOS #swift #xcode #uiview #uipageviewcontroller
Вопрос:
У меня возникли проблемы с центрированием по горизонтали представления внутри UIPageViewController.
Мой ViewController содержит UIView со следующими ограничениями:
- Высота 400
- 20 Выравнивание, ведущее к SafeArea
- 20 Выровнять конечную часть по SafeArea
- Верхнее пространство для панели навигации 10
Внутри этого представления у меня есть представление контейнера, выровненное на 10 сверху, снизу, слева и справа. containerView ссылается на UIPageViewController, как видно на изображении выше. В построителе интерфейса я вижу, что все элементы правильно центрированы. Однако, если я запускаю приложение, я получаю следующее:
Я уже несколько дней обдумываю это, но безуспешно.
Я удалил все отдельные представления и добавил их снова, удалил UIPageViewController и создал его снова, не повезло.
Странно то, что у меня никогда не было проблем с UIPageViewControllers до сих пор. На самом деле, у меня есть еще один подобный раздел в приложении (другой контент), и там все в порядке.
Любые предложения о том, чего мне может не хватать?
Комментарии:
1. Просто проверяю — какие настройки вы установили для интервала между страницами и расположения корешков? Вы добавляете туда что-то, что меняет размещение отдельных представлений в вашем pageViewController?
2. Интервал между страницами @creeperspeak равен 0, а расположение позвоночника равно нулю.
3. Возможно, вам придется показать больше кода или предоставить более подробную информацию, чтобы мы могли помочь. Вы выполняете свои ограничения макета в коде или в построителе интерфейса? Если вы выполняете программные ограничения, можете ли вы показать этот код и где / когда вы его вызываете? FWIW вы можете получить ответы, просто используя инструмент иерархии представлений отладки (в меню нижней области отладки).
4. @creeperspeak Я делаю свой макет в interface builder. Я пытался выполнять их программно и изменять их программно, но безуспешно.
Ответ №1:
Мне удалось разобраться в этом, но только после того, как я столкнулся с аналогичной проблемой с некоторыми UITextFields и другими UIViews.
Он показывает, что myContainerView.frame.size.width возвращает ширину self.view.frame.size.width вместо того, что должно возвращаться.
В этом случае ведущее положение containerView (20 относительно безопасной области) self.view.frame.size.width сделало представление нецентрированным.
Поэтому мне пришлось немного посчитать, чтобы исправить это, хотя это больше похоже на взлом, чем на реальное исправление.
let mainViewWidth: CGFloat! = self.view.frame.size.width
let externalConstraints: CGFloat = 10*4
let imageViewWidth: CGFloat! = mainViewWidth - externalConstraints
let titleLabelWidth: CGFloat! = mainViewWidth - externalConstraints
let textLabelWidth: CGFloat! = mainViewWidth - (externalConstraints 20*2)
clIVPaceContentLeading.constant = 0.0
clIVPaceContentWidth.constant = imageViewWidth
clLBLPageContentTitleLeading.constant = 0.0
clLBLPageContentTitleWidth.constant = titleLabelWidth
clLBLPageContentTextLeading.constant = 20.0
clLBLPageContentTextWidth.constant = textLabelWidth
У кого-нибудь есть идеи о том, почему это происходит?