关闭了视图的自动布局,但是这样做并没有起作用。我对高度没有限制,只有宽度与父视图的宽度相等。
@IBOutlet weak var questionTextView: UITextView!
override func viewDidLoad() {
var newFrame = CGRectMake(0, 0, 300, 202)
questionView.frame = newFrame
}
您在 Interface Builder 中是否关闭了整个 nib 的自动布局?
在 Interface Builder 中,您无法为特定的子视图关闭自动布局,只能在运行时以编程方式完成。
根据您所说,您仍然有约束条件。如果已经关闭了自动布局,为什么还有约束条件呢?
如果您启用了自动布局,则使用框架设置视图的高度将无效,因为它会与自动布局规则冲突。
如果您需要在启用自动布局的情况下更改视图的高度,则需要为高度约束创建一个 IBOutlet,并在运行时修改它,例如:
@IBOutlet weak var heightConstraint: NSLayoutConstraint!
self.heightConstraint.constant = 200
[编辑]
PS:正如接受的答案所说:如果您启用了自动布局,则使用框架设置视图的高度将不起作用,因为它会与自动布局规则冲突
。这段代码更改了框架,因此如果您尝试在自动布局中使用此代码,它将无法正常工作。
[原始答案]
您还可以创建一个UIView扩展:
UIViewExtensions.swift:
import Foundation
import UIKit
extension UIView {
// MARK: - Frame
/**
Redefines the height of the view
:param: height The new value for the view's height
*/
func setHeight(height: CGFloat) {
var frame: CGRect = self.frame
frame.size.height = height
self.frame = frame
}
/**
Redefines the width of the view
:param: width The new value for the view's width
*/
func setWidth(width: CGFloat) {
var frame: CGRect = self.frame
frame.size.width = width
self.frame = frame
}
/**
Redefines X position of the view
:param: x The new x-coordinate of the view's origin point
*/
func setX(x: CGFloat) {
var frame: CGRect = self.frame
frame.origin.x = x
self.frame = frame
}
/**
Redefines Y position of the view
:param: y The new y-coordinate of the view's origin point
*/
func setY(y: CGFloat) {
var frame: CGRect = self.frame
frame.origin.y = y
self.frame = frame
}
}
我还添加了设置宽度、X和Y的方法。您可以在任何视图中使用该扩展,例如:
yourView.setHeght(100)
var someView = UITextView(frame: CGRect(x: 0, y: 0, width: **view.bounds.size.width**, height: 123))
someView.layer.backgroundColor = UIColor.orangeColor().CGColor
view.addSubview(someView)
view.frame = CGRect(x: self.playerChatBackground.frame.origin.x, y:
self.playerChatBackground.frame.origin.y, width: 100.0, height: 36.0)
viewDidLoad
实现开始时调用super.viewDidLoad()
! - André Slotta