使用“自动布局”正确对齐“通知中心”窗口小部件中的元素

时间:2015-03-02 07:10:35

标签: ios autolayout ios-app-extension ios8-today-widget uiedgeinsets

我在Notification Center扩展程序中获取元素的正确对齐时遇到了困难。我想对齐元素以尊重应用的默认边距 - 它应该与应用程序名称中的第一个字符保持对齐,并且与应用的某个填充对齐。如果您注意到日历扩展中的行,我正在尝试准确匹配这些边距(尽管在某些情况下这些边缘似乎也不正确)。

我使用自动布局设置了我的元素,所有这些都是以编程方式完成的。我将领先等于self.view的前导和尾随self.view的尾随。当我在各种设备上运行扩展时,提货填充不一致,而尾部总是清晰到远边。

如果我将它从Leading和Trailing更改为LeadingMargin和TrailingMargin,它看起来完全相同。如果我改变它以使元素的Leading与视图的LeadingMargin对齐并且跟踪视图的TrailingMargin,那么尾随似乎是所需的边缘但是在iPhone 6上向前推得太远,即使它在iPad上是完美的。在横向的iPhone 6 Plus上,前导与应用程序图标的开头对齐,尾随没有填充,但有时只有!其他时候它会增加边距。

如何配置它以正确对齐元素?

我没有实施widgetMarginInsetsForProposedMarginInsets

//viewDidLoad:
let label = UILabel()
label.backgroundColor = UIColor.blueColor()
label.setTranslatesAutoresizingMaskIntoConstraints(false)
self.view.addSubview(label)
self.view.addConstraint(NSLayoutConstraint(item: label, attribute: .Top, relatedBy: .Equal, toItem: self.view, attribute: .Top, multiplier: 1, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: label, attribute: .Bottom, relatedBy: .Equal, toItem: self.view, attribute: .Bottom, multiplier: 1, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: label, attribute: .Leading, relatedBy: .Equal, toItem: self.view, attribute: .Leading, multiplier: 1, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: label, attribute: .Trailing, relatedBy: .Equal, toItem: self.view, attribute: .Trailing, multiplier: 1, constant: 0))
let heightConstraint = NSLayoutConstraint(item: label, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .Height, multiplier: 1, constant: 100)
heightConstraint.priority = 999
self.view.addConstraint(heightConstraint)

iPhone 6 Portrait: enter image description here

iPhone 6 Plus Portrait: enter image description here

iPhone 6 Plus横向: enter image description here

iPad(人像/风景): enter image description here

1 个答案:

答案 0 :(得分:0)

看起来这是一个影响iOS 8.2及之前版本的问题,因为它的行为符合预期,如果我使用Leading - >是一致的领先和尾随 - > iOS 8.3中的TrailingMargin。