在我的OS X中使用swift遇到了这个错误:
"此应用程序正在从后台线程修改自动布局引擎,这可能导致引擎损坏和奇怪的崩溃.这将导致未来版本中的异常."
我有一个我的NSWindow,我正在交换contentView窗口的视图.当我尝试在窗口上执行操作时,或者在向窗口添加窗口时,我收到错误.尝试禁用自动调整大小的东西,我没有任何使用自动布局的东西.有什么想法吗?NSApp.beginSheetsubview
有时它很好,没有任何反应,有时它完全打破了我的UI负担
自动布局让我的生活变得困难.从理论上讲,当我切换时它会非常有用,但我似乎总是在打架.
我做了一个演示项目试图找到帮助.有没有人知道如何在调整视图大小时使视图之间的间距均匀增加或减少?
这是三个标签(手动间隔垂直):

我想要的是让他们在旋转时均匀地调整间距(而不是视图大小).默认情况下,顶视图和底视图朝中心方向挤压:

我有一个自定义视图,layoutSubview在动画期间没有收到消息.
我有一个填充屏幕的视图.如果我更改导航栏的高度,它在屏幕底部有一个自定义子视图,可以在Interface Builder中正确调整大小.layoutSubviews在创建视图时调用,但从不再调用.我的子视图已正确布局.如果我关闭通话中状态栏,layoutSubviews则根本不会调用子视图,即使主视图确实为其调整大小设置了动画.
在什么情况下layoutSubviews实际上被称为?
我已经autoresizesSubviews设置NO为我的自定义视图.在Interface Builder中,我有顶部和底部支柱以及垂直箭头设置.
我正在使用自动布局和约束,并发现Constrain to marginsXCode 6中有一个选项,它在XCode 5中不存在,默认情况下会被选中.
我创建了一个测试项目,然后UITableView在ViewController上添加了一个框架,其框架设置为与视图相同的大小并添加了约束
XCode 6 你可以看到这里,即使tableview具有与视图相同的帧,XCode建议添加-16作为约束,而XCode 5会建议添加间距0.

现在,当您取消选中"Constrain to margin"选项时,它的行为与XCode 5相同,并建议将0添加为约束

另外,我发现一旦我用Constrain添加约束来检查边距,我就不能再在XCode 5中打开storyboard文件了,所以它绝对是XCode 6中的新东西.
希望我能够正确地解释我的问题.我想了解"限制边际"实际上是什么以及何时应该而且不应该使用它.如果它非常简单明了,我会道歉.
编辑
我UITableView在iOS 8下运行,并且我在故事板中使用来自约束的自动单元格高度.
我的一个单元格包含一个UITextView,我需要它根据用户输入收缩和扩展 - 点击缩小/扩展文本.
我这样做是通过向文本视图添加运行时约束并更改约束上的常量以响应用户事件:
-(void)collapse:(BOOL)collapse; {
_collapsed = collapse;
if(collapse)
[_collapsedtextHeightConstraint setConstant: kCollapsedHeight]; // 70.0
else
[_collapsedtextHeightConstraint setConstant: [self idealCellHeightToShowFullText]];
[self setNeedsUpdateConstraints];
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我将其包装在tableView更新中并致电[tableView setNeedsUpdateConstraints]:
[tableView beginUpdates];
[_briefCell collapse:!_showFullBriefText];
[tableView setNeedsUpdateConstraints];
// I have also tried
// [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];
// with exactly the same results.
[tableView endUpdates];
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我的单元格确实扩展(并在进行动画时动画)但是我得到一个约束警告:
2014-07-31 13:29:51.792 OneFlatEarth[5505:730175] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one …Run Code Online (Sandbox Code Playgroud) 我看到调试器日志中出现错误:
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x191f0920 H:[MPKnockoutButton:0x17a876b0]-(34)-[MPDetailSlider:0x17a8bc50](LTR)>
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.
Run Code Online (Sandbox Code Playgroud)
我怎么陷阱那个电话?它不会出现在我的代码中的任何位置.
我知道汽车布局链基本上包含3个不同的过程.
我不完全清楚的是-setNeedsLayout和之间的内在差异-setNeedsUpdateConstraints.来自Apple Docs:
如果要调整视图子视图的布局,请在应用程序的主线程上调用此方法.此方法记录请求并立即返回.由于此方法不强制立即更新,而是等待下一个更新周期,因此可以在更新任何视图之前使用它来使多个视图的布局无效.此行为允许您将所有布局更新合并到一个更新周期,这通常会提高性能.
当自定义视图的属性以会影响约束的方式更改时,可以调用此方法以指示需要在将来的某个时刻更新约束.然后系统将调用updateConstraints作为其正常布局传递的一部分.在需要之前立即更新约束可确保在布局过程之间对视图进行多次更改时,不会不必要地重新计算约束.
当我想在修改约束后为视图设置动画并为我通常调用的更改设置动画:
[UIView animateWithDuration:1.0f delay:0.0f usingSpringWithDamping:0.5f initialSpringVelocity:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{
[self.modifConstrView setNeedsUpdateConstraints];
[self.modifConstrView layoutIfNeeded];
} completion:NULL];
Run Code Online (Sandbox Code Playgroud)
我发现,如果我使用-setNeedsLayout的,而不是-setNeedsUpdateConstraints一切都按预期工作,但如果我改变-layoutIfNeeded用-updateConstraintsIfNeeded,动画将不会发生.
我试图得出自己的结论:
-updateConstraintsIfNeeded 仅更新约束但不强制布局进入该过程,因此仍保留原始帧-setNeedsLayout也叫-updateContraints方法那么什么时候可以使用一个而不是另一个?关于布局方法,我是否需要在约束或父视图中更改的视图上调用它们?
我试图动画一些视图,以便它们被景观中的巨型键盘阻挡.如果我简单地为框架设置动画,它的效果很好,但是其他人认为这会适得其反,我应该更新NSLayoutConstraints.但是,它们似乎不具有动画效果.有没有人让他们成功地工作?
//heightFromTop is an NSLayoutConstraint referenced from IB
[UIView animateWithDuration:0.25 animations:^{
self.heightFromTop.constant= 550.f;
}];
Run Code Online (Sandbox Code Playgroud)
结果是立即跳到有问题的高度.
我正在尝试UICollectionViewCells使用自动布局进行自我调整,但我似乎无法让单元格根据内容调整自己的大小.我无法理解如何根据单元格内容中的内容更新单元格的大小.
这是我尝试过的设置:
UICollectionViewCell一个UITextView.UITextView已禁用.UITextView固定在单元格左侧,显式宽度为320.UITextView固定到单元格的顶部.UITextView具有高度限制设置为其中一个恒定的UITextView报告将适合文本.这是单元格背景设置为红色,UITextView背景设置为蓝色的样子:

我把我已经在GitHub上玩的项目在这里.
如果我使用autolayout安排了UIButton,它的大小可以很好地调整以适应其内容.
如果我将图像设置为button.image,则内在大小似乎再次考虑到这一点.
但是,如果我调整titleEdgeInsets按钮的按钮,布局不会考虑到这一点,而是截断按钮标题.
如何确保按钮的固有宽度占据插入?

编辑:
我使用以下内容:
[self.backButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)];
Run Code Online (Sandbox Code Playgroud)
目标是在图像和文本之间添加一些分隔.
autolayout ×10
ios ×9
cocoa-touch ×3
animation ×1
bounds ×1
constraints ×1
ios6 ×1
macos ×1
objective-c ×1
rotation ×1
spacing ×1
storyboard ×1
swift ×1
uibutton ×1
uikit ×1
uitableview ×1
uiview ×1
xcode ×1
xcode6 ×1
xcode7 ×1