所以基本上,我有一个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
等
答案 0 :(得分:1)
在现代应用程序中,您永远不应该直接设置.frame
。特别是不在viewDidAppear
中 - 您的布局会在旋转和幻灯片放映或拆分视图多任务处理时更改,同时保持可见状态。
正确的做法是始终使用自动布局,通常在Interface Builder中应用所有自动布局约束,必要时按大小类进行自定义,并在那里进行预览。任何错误指定都可以通过这种方式更容易地纠正。可以在raywenderlich.com找到优秀的教程: