Максимальная высота iOS 8 Today Extension?
Я работаю над расширением Today с таблицей с динамическим размером. Мне удалось получить таблицу для изменения размера для контента, используя:
self.preferredContentSize = accountsTable.contentSize
Однако я обнаружил, что он не станет выше определенного размера (568 пикселей), хотя я могу сказать, что таблица contentSize больше.
Я не понимаю, является ли это встроенным лимитом или если есть способ обойти это, чтобы сделать более крупный вид. Похоже, что некоторые предыдущие расширения (виджет Stocks) могут стать больше.
Любое другое работает в одном и том же поведении. Кто-нибудь знает, возможно ли увеличить расширение, либо сразу, либо с помощью кнопки "Показать все", как виджет "Фондовый"?
Ответы
Ответ 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, а не фактический размер. Насколько я мог понять, нет никакого способа получить реальный размер.