ios - 视觉格式自动布局中的灵活大小元素如何决定使用哪个谓词

标签 ios autolayout predicate visual-format-language

在以编程方式使用自动布局和视觉格式时,我对给定两个谓词时如何做出决定感到困惑。例如,以下约束:

"H:[myTextView(>=300,<=700)]"

到目前为止,在我尝试的每台设备上,无论是 iPhone 5S、6 还是 iPad,宽度始终为 300。 什么情况下宽度会大于300?此外,iOS 7 是我使用 Swift 部署此应用程序的目标。

基本上,我希望我的 View 在 iPhone 上占满屏幕的大部分宽度,但在 iPad 上占一半多一点。

我的解决方案

基于 rdelmar 的回答。

self.view.addConstraint(NSLayoutConstraint(
        item:self.infoTextView, attribute:.Width,
        relatedBy:.Equal, toItem:self.view,
        attribute:.Width, multiplier:0.23, constant:228))

最佳答案

您不能以这种方式使用 >= 和 <= 约束,因为当您计算该表达式时,两者之间的任何值都会满足它,因此系统通常只会选择一个或另一个。在 iOS 8 中,你可以使用 size classes 对不同尺寸的屏幕给予不同的约束。

如果您正在为 iOS 7 编程,您需要检查您使用的是哪个设备,并相应地设置约束,或者使宽度相对于 View 的宽度。我认为您必须使用其他约束方法 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:,尽管这样做。通过使用乘数和常量,您可以制作 View ,例如在 iPhone 上为 300 宽,但在 iPad 上为 400(对于 320 点宽的手机和 768 点宽的 iPad,乘数为 0.223,常数为 228 ).

关于ios - 视觉格式自动布局中的灵活大小元素如何决定使用哪个谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26245262/

相关文章:

javascript - mdg :geolocation seems to run differently on my localhost than on myApp. meteor 网

java - 使用 Spring JPA 规范和 Hibernate 加入不同的元素

iphone - UIWindow 没有任何 subview

ios - UIWebView中的YouTube视频未居中

ios - 以编程方式在两个 subview 之间创建约束

uitableview - UITableViewCell 中具有动态高度的多个 UILabels

iOS 重用表格单元格设计

swift - 删除核心数据条目无法使用参数列表 'deleteObject' 调用 '([AnyObject]?)'

haskell - 了解一点 Haskell

ios - 两个私有(private)队列上下文之间的 mergeChangesFromContextDidSaveNotification