iOS 8今日扩展的最大高度?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 8今日扩展的最大高度?相关的知识,希望对你有一定的参考价值。

我正在使用动态大小的表格进行今日扩展。我已经能够使用以下内容来调整内容的大小:

    self.preferredContentSize = accountsTable.contentSize

但是,我发现即使我可以告诉表格contentSize更大,它也不会比某个尺寸(568像素)更高。

我不清楚这是否是一个内置限制,或者是否有办法解决这个问题。似乎一些先前的扩展(Stocks小部件)能够变得更大。

其他人遇到同样的行为。任何人都知道是否可以立即使扩展显示更大或使用像Stock小部件一样的“全部显示”按钮?

答案

我做了一些测试,你可以用这个公式计算今日延期的最大高度:

对于iPhone:

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

对于iPad:

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

这适用于屏幕尺寸...

另一答案

好的,虽然你可以分配给preferredContentSize任何CGSize它减少到最大高度和宽度。

设备方向(最大宽度,最大高度):

iPhone 5S人像(272,441.5) iPhone 5S风景(520,205.5)

iPhone 6 Portrait(327,540.5) iPhone 6风景(586,260.5)

iPhone 6 Plus Portrait(362,610) iPhone 6 Plus风景(585,288)

iPad Mini Portrait(535,853) iPad Mini Landscape(535,597)

iPad Portrait(711,985) iPad Landscape(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
}
另一答案

似乎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);
}
另一答案

要获取窗口小部件活动显示模式的最大高度,请在UIViewController中执行此操作:

let 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
}
另一答案

建议的方法是使用自动布局约束来约束视图的高度。

看起来568px只是iPhone 5的最大高度而不是实际尺寸。据我所知,没有办法获得真正的尺寸。

以上是关于iOS 8今日扩展的最大高度?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8 移除今日扩展

iOS 8 beta 5 中的今日扩展的 NSUserDefaults 是不是被破坏?

iOS 8 今日小部件 - UIAlertView

使用自动布局为今天的 iOS8 扩展设置固定高度

iOS 8 今日小部件 - SLComposeViewController 未正确显示

无法从 iOS 中删除今日视图扩展