使用自动布局为今天的 iOS8 扩展设置固定高度

Posted

技术标签:

【中文标题】使用自动布局为今天的 iOS8 扩展设置固定高度【英文标题】:Setting fixed height for iOS8 today extension using auto layout 【发布时间】:2014-09-19 04:43:56 【问题描述】:

我正在尝试实现一个简单的今日小部件,其中包含一个固定高度的标签。

在文档中它说:

如果小部件有额外的内容要显示,您可以依靠 Auto 布局约束以适当调整小部件的高度。

但是,我不断收到“无法同时满足约束”警告。

这是我尝试过的:

    创建一个新的“Today Extension”目标,它创建带有“Hello World”标签和视图控制器的故事板。 将高度限制设置为“Hello World”标签。

当我跑步时,我得到:

2014-09-18 21:13:07.123 TestWidget[23381:871330] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7f87c31126d0 V:[UILabel:0x7f87c3113230'Hello World Fixed Height'(21)]>",
    "<NSLayoutConstraint:0x7f87c30235b0 V:[_UILayoutGuide:0x7f87c30222b0]-(NSSpace(8))-[UILabel:0x7f87c3113230'Hello World Fixed Height']>",
    "<NSLayoutConstraint:0x7f87c3023600 V:[UILabel:0x7f87c3113230'Hello World Fixed Height']-(NSSpace(8))-[_UILayoutGuide:0x7f87c3022f00]>",
    "<_UILayoutSupportConstraint:0x7f87c3021980 V:[_UILayoutGuide:0x7f87c30222b0(0)]>",
    "<_UILayoutSupportConstraint:0x7f87c30218a0 V:|-(0)-[_UILayoutGuide:0x7f87c30222b0]   (Names: '|':UIView:0x7f87c3112f20 )>",
    "<_UILayoutSupportConstraint:0x7f87c3023360 V:[_UILayoutGuide:0x7f87c3022f00(0)]>",
    "<_UILayoutSupportConstraint:0x7f87c3023300 _UILayoutGuide:0x7f87c3022f00.bottom == UIView:0x7f87c3112f20.bottom>",
    "<NSLayoutConstraint:0x7f87c3326710 'UIView-Encapsulated-Layout-Height' V:[UIView:0x7f87c3112f20(628)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7f87c31126d0 V:[UILabel:0x7f87c3113230'Hello World Fixed Height'(21)]>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

我做错了什么?使用自动布局创建具有固定高度的小部件的正确方法是什么?

【问题讨论】:

遇到同样的问题,您找到解决方案了吗? 还没有,我决定暂时使用preferredContentSize。 this answer 似乎对某些人有用,但我没有尝试过。 是的,完全一样。这些扩展包含很多错误。 【参考方案1】:

我找到了一种方法来消除这些警告,方法是引入包装视图,将所有其他视图放入此包装视图,并将包装视图的高度约束设置为低优先级。

【讨论】:

【参考方案2】:

嗨,您需要做的是设置标签高度、宽度、前导和尾随,并使标签中心 X 和 Y。给出前导、顶部、尾随、底部时会发生什么是当您运行应用程序时,它会保持距离所以你的视野会被拉长。如果你想使用任何前导,顶部,尾随,底部,你需要给底部空间'> ='它增加了超级视图的底部间距。简单易行的解决方案是从 superview 制作 centerX 和 centerY。它将视图准确地放置在屏幕或视图的中心。

Fou 学习目的访问: 简单:http://technet.weblineindia.com/mobile/using-auto-layout-in-xcode-6-for-universal-ios-app-development/ 进阶:http://www.youtube.com/watch?v=G53PuA_TlXk&feature=youtu.be&list=UUtc1Jt_UTPsXpAGtvlr0nUQ 如您所见,我刚刚设置了 centerX、centerY、width、height、前导和尾随空格。

【讨论】:

以上是关于使用自动布局为今天的 iOS8 扩展设置固定高度的主要内容,如果未能解决你的问题,请参考以下文章

请向我解释以下自动布局行为

使自定义单元格(使用自动布局创建)高度为零

具有自动布局的自定义单元格的动态高度

具有固定高度的表格单元格中的自动布局多行标签

使用flex布局,子元素怎么高度自适应

无法在 iOS8 自定义键盘中获得约束