Высота расширения iOS8 сегодня с использованием только автоматической компоновки дает сломанные ограничения

Документация Apple предлагает установить высоту Today Extensions с помощью autolayout.

Если у виджета есть дополнительный контент для отображения, вы можете положиться на ограничения Auto Layout для правильной настройки высоты виджета. Если вы не используете автоматическую компоновку, вы можете использовать свойство UIViewController extendedContentSize, чтобы указать новую высоту виджета.

Тем не менее, каждый пример и учебник, которые я виделpreferredContentSize.

Все мои попытки установить высоту с помощью автоматического размещения приводят к предупреждению о нарушении ограничений.

Установка высоты с помощью Autolayout

Я начал с нового шаблона xcode и нового шаблона расширения сегодня. Единственное, что я добавил вTodayViewController.m было:

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets {
    return UIEdgeInsetsMake(0, 0, 0, 0);
}

Примечание: я все еще получаю эту проблему, если я просто использую поля по умолчанию.

Я ограничил высоту метки, центрировал метку в контейнере и ограничил высоту контейнера такой же, как высота метки:

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

2014-09-28 10:27:39.254 TodayExtension[61090:2672196] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7f8b8b62c670 V:[UILabel:0x7f8b8b62d9b0'Hello World'(124)]>",
    "<NSLayoutConstraint:0x7f8b8b583020 UIView:0x7f8b8b62d6e0.height == UILabel:0x7f8b8b62d9b0'Hello World'.height>",
    "<NSLayoutConstraint:0x7f8b8b5888a0 'UIView-Encapsulated-Layout-Height' V:[UIView:0x7f8b8b62d6e0(667)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7f8b8b62c670 V:[UILabel:0x7f8b8b62d9b0'Hello World'(124)]>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

То, как он нарушает ограничения, на самом деле выглядит так, как я хочу:

Однако в других проектах он решает нарушить другие ограничения и выглядит неправильно. Кроме того, примечание: если я пытаюсь изменить приоритет ограничения высоты, это приводит к сбою Xcode. Так что это весело.

Неограниченная высота

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

Я центрировал подпредставление и ограничил его высоту:

Это просто привело к расширению, которое занимает всю высоту центра уведомлений, и мое представление правильного размера по центру:

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

Что дает?

Я знаю, я мог бы просто использоватьpreferredContentSizeНо тогда почему Apple сказала, что это можно установить с помощью ограничений Auto Layout? Что я делаю неправильно?

Приведенные мною примеры явно надуманы. Я устанавливаю высоту вида, так почему бы просто не установить высоту контейнера, верно? Частью этого в реальном проекте было бы установить высоту виджета на основе ширины, используя только autolayout.

Ответы на вопрос(3)

Ваш ответ на вопрос