水平自动布局约束在 UIScrollView/UIView 上有一些奇怪的偏移
Horizontal autolayout constraint has some strange offset on UIScrollView/UIView
上周我深入研究了自动布局。今天在编写我的第一个应用程序时,我遇到了一个奇怪的 "bug" UIScrollView 和自动布局。我在这里找不到任何类似的问题,所以我创建了一个新主题。
下面是一些示例代码:
self.view.backgroundColor = UIColor.greenColor()
let view = UIScrollView()
view.setTranslatesAutoresizingMaskIntoConstraints(false)
view.backgroundColor = UIColor.redColor()
self.view.addSubview(view)
let constraintH = NSLayoutConstraint.constraintsWithVisualFormat("H:|-[view]-|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["view": view])
// two options fixing this bug: "H:|-0-[view]-0-|" or "H:|[view]|"
// only horizontal constraint has this issue
let constraintV = NSLayoutConstraint.constraintsWithVisualFormat("V:|-[view]-|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["view": view])
self.view.addConstraints(constraintH)
self.view.addConstraints(constraintV)
首先我认为原因是 iOS 8.3 Beta SDK,但 iOS 8.1 SDK 也存在问题。那么是只有我一个人还是我应该向 Apple 报告的一些自动布局错误?
更新:
我将代码从 UIScrollView 修改为 UIView,所以你可以看到这个错误也适用于普通的 UIView。
横向的空格就是Margin,在iOS8里有介绍,你可以在iOS7.1的模拟器上运行试试,不会有margin的。
你是对的,删除破折号应该可以解决问题
let constraintH = NSLayoutConstraint.constraintsWithVisualFormat("H:|[view]|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["view": view])
此外,如果您使用的是 UIScrollView 和 AutoLayout,您应该阅读这篇文章 https://developer.apple.com/library/ios/technotes/tn2154/_index.html
上周我深入研究了自动布局。今天在编写我的第一个应用程序时,我遇到了一个奇怪的 "bug" UIScrollView 和自动布局。我在这里找不到任何类似的问题,所以我创建了一个新主题。
下面是一些示例代码:
self.view.backgroundColor = UIColor.greenColor()
let view = UIScrollView()
view.setTranslatesAutoresizingMaskIntoConstraints(false)
view.backgroundColor = UIColor.redColor()
self.view.addSubview(view)
let constraintH = NSLayoutConstraint.constraintsWithVisualFormat("H:|-[view]-|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["view": view])
// two options fixing this bug: "H:|-0-[view]-0-|" or "H:|[view]|"
// only horizontal constraint has this issue
let constraintV = NSLayoutConstraint.constraintsWithVisualFormat("V:|-[view]-|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["view": view])
self.view.addConstraints(constraintH)
self.view.addConstraints(constraintV)
首先我认为原因是 iOS 8.3 Beta SDK,但 iOS 8.1 SDK 也存在问题。那么是只有我一个人还是我应该向 Apple 报告的一些自动布局错误?
更新: 我将代码从 UIScrollView 修改为 UIView,所以你可以看到这个错误也适用于普通的 UIView。
横向的空格就是Margin,在iOS8里有介绍,你可以在iOS7.1的模拟器上运行试试,不会有margin的。
你是对的,删除破折号应该可以解决问题
let constraintH = NSLayoutConstraint.constraintsWithVisualFormat("H:|[view]|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["view": view])
此外,如果您使用的是 UIScrollView 和 AutoLayout,您应该阅读这篇文章 https://developer.apple.com/library/ios/technotes/tn2154/_index.html