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

Posted

技术标签:

【中文标题】使用自动布局正确对齐通知中心小部件中的元素【英文标题】:Properly align elements in Notification Center widget using Auto Layout 【发布时间】:2015-03-02 07:10:35 【问题描述】:

在我的通知中心扩展中获得正确的元素对齐时遇到了困难。我想对齐元素以尊重应用的默认边距 - 它应该与应用程序名称中的第一个字符左对齐,并与应用的一些填充右对齐。如果您注意到日历扩展中的线条,我正在尝试完全匹配这些边距(尽管在某些情况下这些边距似乎也不太正确)。

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

如果我将其从“Leading and 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 纵向:

iPhone 6 Plus 纵向:

iPhone 6 Plus 横向:

iPad(纵向/横向):

【问题讨论】:

你能打印屏幕结果吗? @AshrafTawfeeq 是的,查看新编辑 【参考方案1】:

看起来这是一个影响 ios 8.2 及更早版本的问题,因为它的行为符合预期,并且如果我在 iOS 8.3 中使用 Leading -> Leading and Trailing -> TrailingMargin 则保持一致。

【讨论】:

以上是关于使用自动布局正确对齐通知中心小部件中的元素的主要内容,如果未能解决你的问题,请参考以下文章

iOS自动布局:将UILabel的左边缘与容器中的水平中心对齐?

iOS 的自动布局能否重新排列 UI 小部件

PyQt:QScrollArea 内小部件的环绕式布局

自动布局对齐到中心(垂直或水平)与常数

Swift UIView 小部件自动布局不起作用

Android垂直对齐文本和小部件