自动布局中的中心故事板视图

时间:2016-05-17 15:42:23

标签: ios swift autolayout nslayoutconstraint

所以基本上,我有一个UITextView,我希望在UIView中居中。这是我的视图控制器代码:

import UIKit

class OpeningScreenViewController: UIViewController {

    @IBOutlet weak var topBarUIView: UIView!
    @IBOutlet weak var topViewTextView: UITextView!

    override func viewDidAppear(animated: Bool) {
        let superViewWidth = view.frame.size.width
        let superViewHeight = view.frame.size.height

    //creating the top bar
        topBarUIView.frame = CGRect(x: 0, y: 0, width: superViewWidth, height: superViewHeight * 0.1)
        topBarUIView.backgroundColor = UIColor.grayColor().colorWithAlphaComponent(0.5)

    //adding text to the top bar
        topViewTextView.frame = CGRectMake(0, 0, superViewWidth, superViewHeight * 0.1)
        topViewTextView.backgroundColor = UIColor.blueColor()
        topViewTextView.text = "Hello World"
        topViewTextView.textAlignment = NSTextAlignment.Center
        topViewTextView.font = UIFont(name: "Arial", size: 24)        
    }    
}

我将背景视图的不透明度更改为50%,将textView更改为背景颜色为蓝色,但是当我运行此选项时,蓝色背景完全在UIView内,一边是10个像素,另一边是20个像素另一个。我不确定为什么。

我在故事板中进行设置,然后将其拖放,然后更改viewDidAppear中视图的属性以覆盖故事板。

我也尝试过这样的事情:

  override func viewDidAppear(animated: Bool) {       
    // Get the superview's layout
    let margins = view.layoutMarginsGuide

    // Pin the leading edge of myView to the margin's leading edge
    topBarUIView.leadingAnchor.constraintEqualToAnchor(margins.leadingAnchor).active = true

    // Pin the trailing edge of myView to the margin's trailing edge
    topBarUIView.trailingAnchor.constraintEqualToAnchor(margins.trailingAnchor).active = true

    // Give myView a 1:2 aspect ratio
    topBarUIView.heightAnchor.constraintEqualToAnchor(topBarUIView.widthAnchor, multiplier: 2.0)
}

有一个奇怪的错误,说布局限制有问题。

分别设置视图的高度和宽度以及起点是否更容易?如果是这样,我怎么能做这样的伪代码:

topBar.startingPoint = (x,y)
topBar.height = this
topBar.width = this

1 个答案:

答案 0 :(得分:1)

在现代应用程序中,您永远不应该直接设置.frame。特别是不在viewDidAppear中 - 您的布局会在旋转和幻灯片放映或拆分视图多任务处理时更改,同时保持可见状态。

正确的做法是始终使用自动布局,通常在Interface Builder中应用所有自动布局约束,必要时按大小类进行自定义,并在那里进行预览。任何错误指定都可以通过这种方式更容易地纠正。可以在raywenderlich.com找到优秀的教程: