Isu*_*uru 1 xcode screen-orientation ios autolayout nslayoutconstraint
我对自动布局有疑问.我正在使用xib文件,我有一个像这样的视图控制器.

它嵌入在一个内部,UINavigationController所以我的按钮定位有Top Space to Superview约束.
问题是当我旋转设备时,它看起来像这样.

正如您所看到的那样,约束仍保持其原始值,因此导航栏边缘与横向模式下的按钮之间存在较大差距.
如何使按钮位置靠近导航栏,就像它在纵向中一样,并且在纵向和横向模式下都是这样的?我顺便使用Xcode 6.
谢谢.
如果要在Xib文件中定义自动布局上边距约束,可以在ViewController的类文件中相对于Xib添加以下代码:
override func viewDidLoad() {
super.viewDidLoad()
if self.respondsToSelector("edgesForExtendedLayout") {
edgesForExtendedLayout = UIRectEdge.None
}
}
Run Code Online (Sandbox Code Playgroud)
简单.但问题是你将无法拥有一个半透明的导航栏.
幸运的是,有几种替代方案.您可以使用Storyboard或代码将自动布局上边距定义为相对于"顶部布局指南"(而不是视图).
如果您转到故事板,请单击"固定"按钮,选择上边距约束并选择"顶部布局指南"(请参见下图).

如果您决定UIButton使用代码定义所有约束,则可以使用以下代码中指示的可视格式语言:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var button = UIButton()
button.backgroundColor = UIColor.blueColor()
button.setTranslatesAutoresizingMaskIntoConstraints(false)
view.addSubview(button)
var viewsDict = ["button" : button, "topLayoutGuide" : topLayoutGuide]
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[topLayoutGuide]-20-[button]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDict))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-20-[button]-20-|", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDict))
}
}
Run Code Online (Sandbox Code Playgroud)
最后,有第四种(混合的)方式来执行你想要做的事情.在Xib中设置约束,将上边距约束拖到UIButton视图控制器类(命名为topConstraint和button),并将代码设置如下:
import UIKit
class ViewControllerTwo: UIViewController {
@IBOutlet weak var topConstraint: NSLayoutConstraint!
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
view.addConstraint(NSLayoutConstraint(item: button, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.topLayoutGuide, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 10))
view.removeConstraint(topConstraint)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1464 次 |
| 最近记录: |