Расширение My Today должно иметь динамическую высоту, основанную на содержимом, отображаемом виджетами. Я смог добиться этого, добавив ограничение на мой самый нижний элемент: верхняя часть направляющей нижней части меньше или равна нижней нижней части элемента, с константой 0, приоритетом 999, множителем 1.Сегодня Высота расширения для iPad намного больше, чем указано
Это работает точно так, как ожидалось на iPhones - высота виджета соответствует всему контенту плюс нижнее поле по умолчанию применяется до отображения следующего виджета.
Но на iPad кажется, что высота моего виджета равна максимальной высоте. Центр уведомлений позволит виджету быть - у моего виджета много места, это почти полный экран.
Как удалить лишнее пространство?
Я точно знаю, в чем проблема, но я не уверен, как ее решить - см. Раздел «Проблема». Во-первых, позвольте мне объяснить установку:
установки параметров:
Я установил вид этого внутреннего абонента в раскадровке, ничего не делается программно. Представление состоит из 5 элементов, расположенных вертикально, а некоторые другие по горизонтали. Эти ограничения Автокомпоновка для этой вертикальной линии сверху вниз - где не указано приоритет 1000, множитель 1:
UILabel: height = 35, top space to top layout guide with constant of 10
UIButton: equal height and width to a different button (whose aspect ratio is 1:1, there is no fixed width/height), top space to label 10
UIButton: equal height and width to same button, top space to above button 8
UIButton: equal height and width to same button, top space to above button 8
UIButton: equal height and width to same button, top space to above button 8, bottom space to bottom layout guide <= 0 with priority 999
Необходимое Поведение:
- Мне нужна сетка 4x4, расположенные под одной меткой полной ширины
- Каждая кнопка должна быть такой же ширины и высоты - все идеальные квадраты
- Нет дополнительного места под последним r вл кнопок
Результат:
Ожидаемый результат:
Проблема:
от соотношения сторон ограничений на все кнопки в конечном итоге косвенно навязывает «неявный» аспект ra tio на высоте представления виджетов, когда он отправляется systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:
, где он передает необходимую ширину (724) для макета с требуемым приоритетом и высотой 0 (для сжатия представления) с приоритетом уровня фитинга. Это приводит к высокому виджету виджетов на iPad, где вид шире для начала. Но нет фактического ограничения соотношения сторон, которое можно удалить. По сути, поскольку я применял ограничения соотношения сторон ко всей кнопке, высота сегодняшнего расширения зависит от его ширины (учитывая все ограничения вместе, соотношение сторон и другое). Таким образом, высота расширения неуклюже в широкой области, проявляющаяся на широком устройстве, таком как iPad. Ограничения на кнопки должны быть пересмотрены или как-то отрегулированы.
Выборка проекта:
sample project that demonstrates the issue доступен из CloudApp, так что вы можете скачать и играть с ним.
Что я пробовал:
Я попытался удалить поля по умолчанию врезки в переопределив widgetMarginInsetsForProposedMarginInsets
и возвращение 0
на дно. Это удалило заполнение по умолчанию, поэтому немного уменьшилось, но под ним все еще много свободного места.
UILabel
имел ограничение на нем: метка Ведущем равно ведущем SuperView в - постоянная 0, приоритет 1000, множитель 1. Если я просто изменить, что ведущую SuperView в края, дополнительные нижний интервал волшебным образом исчезает. Я задавался вопросом, было ли это потому, что элементы становились слишком большими, поэтому увеличение количества левого интервала уменьшало бы их размер, но я старался, чтобы он был установлен на регулярное лидерство и увеличивал константу, и это не помогло решить проблему. Но это только разрешает проблему для iPad в портрете. И это даже не полностью разрешает его, каждый раз, когда вы вытаскиваете Центр уведомлений, он начинается с большой высоты, а затем сжимается до нужного размера. В ландшафте он никогда не уменьшается до нужного размера.
Покушение Решения:
- @Lefteris предложил жестко прописывать размер, который не будет работать в этом случае как высота является динамическим и виджет доступен для многих экранных размеров/ориентации.
- @Yuyutsu попытался его решить, но, к сожалению, он не соответствует требованиям и демонстрирует противоречивые ограничения и измененный макет.
Я получил некоторые странные проблемы о Сегодняшний рост высоты несколько дней назад, прочитайте это FYI: http://stackoverflow.com/questions/26087907/height-of-ios8-today-extension-using-only-auto-layout-gives-broken-constraints – liushuaikobe
попробуйте создавая расширение в качестве подзапроса другого настраиваемого контроллера представлений, а затем применяйте в нем viewDidLoad(), он должен работать –