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

Максимальная высота iOS 8 Today Extension?

Я работаю над расширением Today с таблицей с динамическим размером. Мне удалось получить таблицу для изменения размера для контента, используя:

    self.preferredContentSize = accountsTable.contentSize

Однако я обнаружил, что он не станет выше определенного размера (568 пикселей), хотя я могу сказать, что таблица contentSize больше.

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

Любое другое работает в одном и том же поведении. Кто-нибудь знает, возможно ли увеличить расширение, либо сразу, либо с помощью кнопки "Показать все", как виджет "Фондовый"?

4b9b3361

Ответ 1

Я сделал несколько тестов, и вы можете рассчитать максимальную высоту вашего Today Extension с помощью этого формуляра:

для iPhone:

float maxHeight = [[ UIScreen mainScreen ] bounds ].size.height - 126;

для iPad:

float maxHeight = [[ UIScreen mainScreen ] bounds ].size.height - 171;

Это должно работать для всех размеров экрана...

Ответ 2

Хорошо, хотя вы можете назначить preferredContentSize any CGSize, он уменьшен до максимальной высоты и ширины.

Устройство Ориентация (максимальная ширина, максимальная высота):

iPhone 5S Портрет (272, 441,5)
iPhone 5S Пейзаж ( 520, 205,5)

iPhone 6 Портрет ( 327, 540,5)
iPhone 6 Пейзаж ( 586, 260,5)

iPhone 6 Plus Портрет ( 362, 610)
iPhone 6 Plus Пейзаж ( 585, 288)

iPad Mini Портрет ( 535, 853)
iPad Mini Пейзаж ( 535, 597)

iPad Портрет ( 711, 985)
iPad Пейзаж ( 967, 729)

Как я получил эти значения?

@IBOutlet weak var sizerView: UIView!

внутри viewDidLoad:

preferredContentSize = CGSizeMake(0, 2000)
dispatch_after(1, dispatch_get_main_queue(), { //it needs time to render itself
    label.text = NSStringFromCGSize(self.sizerView.bounds.size) //here you have MAX VALUES
}

Ответ 3

Кажется, что iOS добавляет ограничение UIView-Encapsulated-Layout-Height к вашим собственным ограничениям:

(
    "<NSLayoutConstraint:0x610000280640 V:[_UILayoutGuide:0x7f92d0513810]-(500)-[UILabel:0x7f92d040cb20'Hello World']>",
    "<NSLayoutConstraint:0x610000280690 V:[UILabel:0x7f92d040cb20'Hello World']-(500)-[_UILayoutGuide:0x7f92d0515100]>",
    "<_UILayoutSupportConstraint:0x6100002a2f40 V:[_UILayoutGuide:0x7f92d0513810(0)]>",
    "<_UILayoutSupportConstraint:0x6100002a2ee0 V:|-(0)-[_UILayoutGuide:0x7f92d0513810]   (Names: '|':UIView:0x7f92d040c810 )>",
    "<_UILayoutSupportConstraint:0x6100002a3000 V:[_UILayoutGuide:0x7f92d0515100(0)]>",
    "<_UILayoutSupportConstraint:0x6100002a2fa0 _UILayoutGuide:0x7f92d0515100.bottom == UIView:0x7f92d040c810.bottom>",
    "<NSLayoutConstraint:0x60800009e780 'UIView-Encapsulated-Layout-Height' V:[UIView:0x7f92d040c810(628)]>"
)

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

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {

    for (NSLayoutConstraint *constraint in self.view.constraints) {
        if ([constraint.identifier isEqualToString:@"UIView-Encapsulated-Layout-Height"]) {
            NSLog(@"Height: %@", @(constraint.constant));
        }
    }

    completionHandler(NCUpdateResultNewData);
}

Ответ 4

Чтобы получить максимальную высоту активного режима отображения виджетов, сделайте это в вашем UIViewController:

var context = self.extensionContext
if let context = context{
    let height = context.widgetMaximumSize(for: context.widgetActiveDisplayMode).height
}

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

var context = self.extensionContext
if let context = context{
    let compactHeight = context.widgetMaximumSize(for: .compact).height
    let expandedHeight = context.widgetMaximumSize(for: .expanded).height
}

Ответ 5

Рекомендуемый способ - использовать ограничения автоматического макета для ограничения высоты вашего представления.

Кажется, что 568px - это всего лишь максимальная высота вашего iPhone 5, а не фактический размер. Насколько я мог понять, нет никакого способа получить реальный размер.