关闭自动布局更改 UIView 的高度
Change height of UIView with autolayout turned off
关闭视图的自动布局。然而,这是行不通的。我对身高没有限制。只有等于父视图宽度的宽度。
@IBOutlet weak var questionTextView: UITextView!
override func viewDidLoad() {
var newFrame = CGRectMake(0, 0, 300, 202)
questionView.frame = newFrame
}
您是否在界面生成器中关闭了整个笔尖的自动布局?
您无法在界面生成器中关闭特定子视图的自动布局 - 您只能在运行时以编程方式执行此操作。
根据您所说,您仍然有一个约束处于活动状态。当你已经关闭自动布局时,你如何有约束?
如果您启用了自动布局,则使用框架设置视图高度将不起作用,因为它会与自动布局规则冲突。
如果您需要在自动布局处于活动状态时更改视图的高度,则需要为您的高度约束创建一个 IBOutlet
并在运行时修改它,即:
@IBOutlet weak var heightConstraint: NSLayoutConstraint!
self.heightConstraint.constant = 200
尝试这样的事情:
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)
在您的情况下,使用父视图更改视图。
[已编辑]
ps。正如公认的答案所说:If you have auto layout active, setting the height for your view by using the frame won't work since it'll conflict with auto layout rules
。这种和平的代码改变了框架,所以如果你试图将这段代码与自动布局一起使用,它就不会起作用。
[原答案]
您还可以创建一个 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)
您只需要实现 translatesAutoresizingMaskIntoConstraints,并将其设置为 true,您就可以通过代码编写约束,而无需执行其他操作。
示例:view.translatesAutoresizingMaskIntoConstraints = true
// 这个代码可以工作
view.frame = CGRect(x: self.playerChatBackground.frame.origin.x, y:
self.playerChatBackground.frame.origin.y, width: 100.0, height: 36.0)
关闭视图的自动布局。然而,这是行不通的。我对身高没有限制。只有等于父视图宽度的宽度。
@IBOutlet weak var questionTextView: UITextView!
override func viewDidLoad() {
var newFrame = CGRectMake(0, 0, 300, 202)
questionView.frame = newFrame
}
您是否在界面生成器中关闭了整个笔尖的自动布局?
您无法在界面生成器中关闭特定子视图的自动布局 - 您只能在运行时以编程方式执行此操作。
根据您所说,您仍然有一个约束处于活动状态。当你已经关闭自动布局时,你如何有约束?
如果您启用了自动布局,则使用框架设置视图高度将不起作用,因为它会与自动布局规则冲突。
如果您需要在自动布局处于活动状态时更改视图的高度,则需要为您的高度约束创建一个 IBOutlet
并在运行时修改它,即:
@IBOutlet weak var heightConstraint: NSLayoutConstraint!
self.heightConstraint.constant = 200
尝试这样的事情:
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)
在您的情况下,使用父视图更改视图。
[已编辑]
ps。正如公认的答案所说:If you have auto layout active, setting the height for your view by using the frame won't work since it'll conflict with auto layout rules
。这种和平的代码改变了框架,所以如果你试图将这段代码与自动布局一起使用,它就不会起作用。
[原答案]
您还可以创建一个 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)
您只需要实现 translatesAutoresizingMaskIntoConstraints,并将其设置为 true,您就可以通过代码编写约束,而无需执行其他操作。
示例:view.translatesAutoresizingMaskIntoConstraints = true
// 这个代码可以工作
view.frame = CGRect(x: self.playerChatBackground.frame.origin.x, y:
self.playerChatBackground.frame.origin.y, width: 100.0, height: 36.0)