我应该如何在NSSplitView子视图中使用自动布局约束?
我的NSSplitView子视图有3子视图:topPane,tableContainer和bottomPane我这样设置约束:
NSDictionary* views = NSDictionaryOfVariableBindings(topPane, tableContainer, bottomPane);
for (NSView* view in [views allValues]) {
[view setTranslatesAutoresizingMaskIntoConstraints:NO];
}
[myView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[topPane(34)][tableContainer][bottomPane(24)]|"
options:0
metrics:nil
views:views]];
[mySplitView addSubview:myView];
Run Code Online (Sandbox Code Playgroud)
在控制台中得到这个:
Unable to simultaneously satisfy constraints:
(
"<NSLayoutConstraint:0x7fd6c4b1f770 V:[NSScrollView:0x7fd6c4b234c0]-(0)-[CPane:0x7fd6c4b2fd10]>",
"<NSLayoutConstraint:0x7fd6c4b30910 V:[CPane:0x7fd6c4b2f870(34)]>",
"<NSLayoutConstraint:0x7fd6c4b30770 V:|-(0)-[CPane:0x7fd6c4b2f870] (Names: '|':NSView:0x7fd6c4b22e50 )>",
"<NSLayoutConstraint:0x7fd6c4b212f0 V:[CPane:0x7fd6c4b2fd10]-(0)-| (Names: '|':NSView:0x7fd6c4b22e50 )>",
"<NSLayoutConstraint:0x7fd6c4b2f910 V:[CPane:0x7fd6c4b2f870]-(0)-[NSScrollView:0x7fd6c4b234c0]>",
"<NSLayoutConstraint:0x7fd6c4b21290 V:[CPane:0x7fd6c4b2fd10(24)]>",
"<NSAutoresizingMaskLayoutConstraint:0x7fd6c3630430 h=--& v=--& V:[NSView:0x7fd6c4b22e50(0)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7fd6c4b1f770 V:[NSScrollView:0x7fd6c4b234c0]-(0)-[CPane:0x7fd6c4b2fd10]>
Run Code Online (Sandbox Code Playgroud)
我认为<NSAutoresizingMaskLayoutConstraint:0x7fd6c3630430 h=--& v=--& V:[NSView:0x7fd6c4b22e50(0)]> …
一年前,我看过几个关于Auto Layout优点的Apple WWDC主题演讲,但是当我在真实世界的项目中尝试它们时,我体验到当你在Storyboard上移动一些UI元素时,它会打破一半的约束,消除了自动布局的所有好处.
到目前为止,我已经非常成功地使用了Springs&Struts,并且结合KVO观察框架路径进行查看,只需几行代码即可优雅地处理大部分旋转重新调整.
所以现在iOS 7问世,我得到一个问题:我是否可以成功地仅针对iOS 7应用程序使用Springs&Struts并避免使用自动布局?或者我这样做会失去什么?学习和掌握在不同情况下使用自动布局的技巧可能需要几天时间,所以我真的很感激一些有争议的建议.
解决:感谢Max的回答,我开始深入研究Auto Layout; 虽然Null他的回答是正确的 - 你实际上可以在iOS 7上使用Springs&Struts而不会有太多麻烦,Auto-Layout功能强大.
显然在Xcode 5中,修复了以下内容:
要删除一个约束,你实际上不需要进行古老的萨满雨之舞.您将其删除并且布局进入警告模式,指示您需要解决的问题才能使自动布局工作.
当你移动东西时,你的约束不会改变; 仅在Interface Builder中查看框架更改.
当Interface Builder中的框架实际上与使用布局约束框架计算的框架不同时,Interface Builder将使用红色虚线指示该元素的运行时框架.最后它是正确的.谢谢,Apple.
这是WWDC 2013会话的链接,演示如何在Xcode 5中利用所有这些.您需要Apple开发者帐户才能查看.
所以我现在的选择是自动布局.谢谢大家.
我试图使用可视化格式语言来居中视图.
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_progressView(300)]-|" options:NSLayoutFormatAlignAllCenterY metrics:0 views:views]];
Run Code Online (Sandbox Code Playgroud)
(views是一个NSDictionaryOfVariableBindings包含_progressView)
它不会将我的视图(宽度:300)置于self.view(宽度:768)内.它将它与8像素边距对齐,好像我只会写@"H:|-[_progressView(300)".
是使用类似的东西来中心视图的唯一方法:?
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:_progressView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual
toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]];
Run Code Online (Sandbox Code Playgroud)
谢谢
我有一个UITableView固定高度为100点的细胞.单元格在xib文件中创建,该文件使用3个约束将a固定UILabel到单元格的左,右和上边缘contentView.标签的垂直拥抱优先级设置为1000,因为我希望单元格的高度尽可能小.
当xib文件中单元格的宽度设置为320磅,与iPhone上的tableView宽度相同时,autolayout按预期工作.但是,当我将单元格的宽度设置为小于320点时,我得到了意想不到的结果.(我想在tableViews中使用具有不同宽度的相同单元格,例如在通用应用程序中)
例如:当我将宽度设置为224点并为标签提供一个占据该宽度的2行的文本时,标签的高度将增加以适应2行,但是当单元格调整为320点以适应一个tableView的宽度,文本只占1行,但标签的高度保持2行.
我在GitHub上放了一个示例项目来演示这个问题:https://github.com/bluecrowbar/CellLayout
有没有办法让UILabel总是调整大小以拥抱其文本内容?
我正在尝试使用自动布局约束来自动调整视图中几个类似大小的按钮,以产生以下效果:
在调整大小之前

调整大小后的预期效果

你可以告诉我,我希望按钮的大小相同,我也希望每个按钮之间的间距是20分.起初看起来很简单,所以我设置了以下约束:
调整大小后实际发生了什么

在预览中或当我在iPhone /模拟器中测试运行应用程序时,按钮会调整大小,甚至不会遵循我为其设置的相同宽度约束.实际上,包含视图的视图也会调整大小以适应新的按钮大小.任何人都知道如何在界面构建器中完全解决这个问题?
因此,我正在尝试创建一个UIScrollView仅在故事板中,允许我添加滚动标签超过VC的高度.这是我做的:
创建UIScrollView占用任何宽度任何高度VC的大小
对于顶部,底部,左侧和右侧的最近邻居间距设置约束0
创建的视图是一个subView的UIScrollView与所述相同的宽度的任何宽度的任何高度,但VC 1500高度(因为我只希望它垂直滚动).
将约束设置为最近邻居为0仅适用于左侧,上方和右侧,并将高度约束设置为1500.
我在顶部subView和底部放了一个标签
当我在iPhone 6上运行应用程序时,不会按我希望的方式垂直滚动.任何想法为什么这不起作用?提前致谢.
在Interface Builder中进行了一些可视化布局后,我创建了一些我想在运行时访问的约束.有没有办法在Interface Builder中标记或识别约束,以便以后查找它们?
我想要这样做的原因是我需要根据视觉指定的约束执行一些计算.我知道Apple提供了可视格式语言,我可以在控制器中以编程方式指定约束.我宁愿不使用这种方法,所以我不会失去IB的设计时反馈.
建立引用插座确实有效,但问题仍然存在.
我正在调整我的UI应用程序,但我遇到了一个我无法解决的问题.
我可以看到Compact高度会影响4.7英寸以下的所有iPhone,但我的用户界面很好,除了iPhone 4S(3.5英寸).
我不想修改4.7英寸以下的所有iPhone的布局,只需要修改iPhone 4S,同时我不想遗漏这个设备.
有任何解决方法,所以我可以设置修正案,但仅适用于3.5英寸的肖像?或者我应该告别那里的1亿台设备?
我知道这是一个棘手的问题,几乎是民意调查,但从技术上讲,我想在这里找到最好的方法.
我在VC中有一个全屏的containerView.如果我从一个故事板手动添加一个子容器到containerView做一个嵌入segue看起来很好:

但是如果我通过代码嵌入VC:
class BannerContainerVC: UIViewController {
@IBOutlet weak var container: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let vc = storyboard?.instantiateViewControllerWithIdentifier("test") as UIViewController
self.container.addSubview(vc.view)
}
}
Run Code Online (Sandbox Code Playgroud)
我得到了超级奇怪的结果:

我有UICollectionView类型的标题UICollectionReusableView.
在其中,我有一个标签,其长度因用户输入而异.
因此,我需要根据标签的高度和标头中的其他元素动态调整大小.
这是我的故事板:
这是我运行应用程序时的结果:
autolayout ×10
ios ×7
ios7 ×2
iphone ×2
size-classes ×2
swift ×2
xcode ×2
cocoa ×1
cocoa-touch ×1
ios8 ×1
nssplitview ×1
objective-c ×1
storyboard ×1
uiscrollview ×1
uitableview ×1