9

这是我的故事板

在此处输入图像描述

我正在使用自动布局,而不是使用大小类。

当我在 iPhone 5s 上运行它时,它运行良好。(纵向和横向) 在此处输入图像描述

但是当我在 iPhone 6 plus(纵向)上运行它时,它没有正确对齐。 在此处输入图像描述

在 iPhone 6 plus(横向)上,情况更糟。 在此处输入图像描述

我知道我可以-widgetMarginInsetsForProposedMarginInsets:用来设置边距,但在这种情况下,我需要为每个设备自定义边距。那将是可怕的:(

那么有没有办法让子视图与标题不那么痛苦地对齐?

4

4 回答 4

9

将边缘插图设置为零应该可以解决问题:

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets
{
    return UIEdgeInsetsZero;
}
于 2014-09-28T02:22:07.810 回答
5

看起来你必须手动设置它。您可以通过创建一个约束,然后为其指定一个 IBOutlet,并根据设备/方向设置常量来做到这一点。

作为参考,以下是我发现您需要的边距:

  • 5S - 1 (2像素)
  • 6 - 1 (2 像素)
  • 6 加纵向 - 5 (15px)
  • 6 加横向 - 34 (102px)

您可以从扩展视图的大小中找到您需要的那个,对于纵向 iPhone 6,它是 414 pt。

于 2014-10-07T18:32:22.917 回答
0

您需要自定义小部件边距:

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets;

文档:https ://developer.apple.com/library/ios/documentation/NotificationCenter/Reference/NCWidgetProviding_Protocol/index.html

于 2014-09-24T23:18:16.703 回答
0

修复了某些设备。需要埃里卡斯UIDevice-Extension

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets
{
    defaultMarginInsets.bottom = 0;

    if ([UIDevice.currentDevice.modelIdentifier containsString:@"iPhone7,1"] && self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassCompact) {
        defaultMarginInsets.left += 5;
    } else if ([UIDevice.currentDevice.modelIdentifier containsString:@"iPhone7,1"] && self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular) {
        defaultMarginInsets.left += 34;
    } else {
        defaultMarginInsets.left += 1;
    }

    return defaultMarginInsets;
}
于 2015-07-30T09:40:40.980 回答