31

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

    self.preferredContentSize = accountsTable.contentSize

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

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

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

4

5 回答 5

15

我做了一些测试,您可以使用以下公式计算今日扩展的最大高度:

对于 iPhone:

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

对于 iPad:

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

这应该适用于所有屏幕尺寸......

于 2014-10-14T14:13:56.510 回答
6

好的,尽管您可以将其分配给preferredContentSizeany 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
}
于 2015-05-07T16:06:56.890 回答
4

看来,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);
}
于 2015-05-15T08:20:15.457 回答
1

要获取小部件活动显示模式的最大高度,请在 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
}
于 2019-04-24T18:57:14.227 回答
-3

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

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

于 2014-08-31T08:03:40.010 回答