2017-02-02 19 views
0

Я не знаю, является ли это ошибкой с AutoLayout или Xcode, но я понял, что если я запустил приложение на устройстве, которое не такое же, как у устройства в моей раскадровке , элементы принимают неправильный размер.Ширина UITableviewcell не заполняет экран

I.e. Выбор вида в виде iPhone SE и запуск приложения на iPhone 7+. Размер моего табличного представления - это ширина экрана iPhone SE, это исправляется, когда я перезагружаю представление, а затем он использует ширину экрана iPhone 7+.

Просто заметка, а также вид таблицы не имеет фиксированной ширины и прикреплен к верхней, нижней, левой и правой части с интервалом 0, а также я изменяю высоту ячеек программным путем в коде, если это может повлиять и на него.

Видео: https://drive.google.com/open?id=0B0QLbDLfJn6_YzljUGg4RTUwaTg

+0

Это очень странно ... Я предполагаю, что ваш вопрос является ли это ошибка или нет? – jabbathehutt1234

+0

Как вы обновите представление? – NRitH

+0

Да, и это приложение на основе табуляции, поэтому, когда я добрался до другого представления, выбрав значок вкладки и вернусь, он сортирует себя через секунду. Теперь я подключу видео. – Tunds

ответ

0

Я не могу показаться, чтобы воссоздать это. Я бы рекомендовал дважды проверять любые обновления для Xcode и инструментов разработчика (softwareupdate --install -a).

Если вы этого не сделали, перезапустите Xcode.

EDIT: Игнорировать этот ответ, пожалуйста, напишите Mike Sand's post.

+0

Пробовал это, и XCode не нуждается в обновлении с момента его обновления – Tunds

+0

Weird. Возможно, очистить кеш? – jabbathehutt1234

+1

Это не ошибка xcode. Вы можете воссоздать это, добавив subview ширины 'self.view.frame.size.width' в' viewDidLoad'. Подвью всегда будет иметь ширину в интерфейсе Builder. –

2

Представления, полученные из xib (или раскадровки), имеют свои значения кадров IB при их создании до их добавления в иерархию представлений. Так что, например, вы описываете, вероятно, что что-то обращается к представлению, загруженному из xib, прежде чем оно станет частью процесса компоновки и изменено.

Это также объясняет, почему это исправлено, когда вы уходите и возвращаетесь. В первый раз он получил значения до того, как они были окончательными, но во второй раз значения уже окончательные и правильные.

Код вида, называемый от viewDidLoad() для контроллеров представлений, или awakeFromNib() или initWith(coder:) для просмотра является вероятной причиной. Код макета, вызванный от viewDidLoad(), особенно проблематичен, потому что он отлично подходит для iPhone 5, но теперь вызовет эту проблему.

Невозможно сказать, в чем именно проблема. Из заявлений NSLog, видимых в видео, проблема заключается в том, какие кодовые вызовы называются «ширина обзора по погоде». Это называется слишком рано в процессе компоновки. Он должен быть включен в viewWillAppear или viewWillLayoutSubviews, чтобы убедиться, что правильные значения готовы к тому, что расчет зависит от этого. Надеюсь это поможет.

+0

Выглядит хорошо.Благодаря! – jabbathehutt1234

0

Постарайся self.view.layoutIfNeeded в viewDidLoad или в viewWillAppear

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

  • Нет связанных вопросов^_^