这是我的故事板
我正在使用自动布局,而不是使用大小类。
当我在 iPhone 5s 上运行它时,它运行良好。(纵向和横向)
但是当我在 iPhone 6 plus(纵向)上运行它时,它没有正确对齐。
在 iPhone 6 plus(横向)上,情况更糟。
我知道我可以-widgetMarginInsetsForProposedMarginInsets:
用来设置边距,但在这种情况下,我需要为每个设备自定义边距。那将是可怕的:(
那么有没有办法让子视图与标题不那么痛苦地对齐?
这是我的故事板
我正在使用自动布局,而不是使用大小类。
当我在 iPhone 5s 上运行它时,它运行良好。(纵向和横向)
但是当我在 iPhone 6 plus(纵向)上运行它时,它没有正确对齐。
在 iPhone 6 plus(横向)上,情况更糟。
我知道我可以-widgetMarginInsetsForProposedMarginInsets:
用来设置边距,但在这种情况下,我需要为每个设备自定义边距。那将是可怕的:(
那么有没有办法让子视图与标题不那么痛苦地对齐?
将边缘插图设置为零应该可以解决问题:
- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets
{
return UIEdgeInsetsZero;
}
看起来你必须手动设置它。您可以通过创建一个约束,然后为其指定一个 IBOutlet,并根据设备/方向设置常量来做到这一点。
作为参考,以下是我发现您需要的边距:
您可以从扩展视图的大小中找到您需要的那个,对于纵向 iPhone 6,它是 414 pt。
您需要自定义小部件边距:
- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets;
修复了某些设备。需要埃里卡斯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;
}