Ios 在关闭“自动布局”的情况下更改UIView的高度

Ios 在关闭“自动布局”的情况下更改UIView的高度,ios,swift,uiview,resize,Ios,Swift,Uiview,Resize,关闭视图的自动布局。然而,这不起作用。我对身高没有限制。只有与父视图宽度相等的宽度 @IBOutlet weak var questionTextView: UITextView! override func viewDidLoad() { var newFrame = CGRectMake(0, 0, 300, 202) questionView.frame = newFrame } 您是否在interface builder中关闭了整个nib的自动布局 不能在interface b

关闭视图的自动布局。然而,这不起作用。我对身高没有限制。只有与父视图宽度相等的宽度

@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

试着这样做:

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)

在您的情况下,使用父视图更改视图。

[已编辑]

注:正如公认的答案所说:
如果您激活了自动布局,则使用框架设置视图高度将不起作用,因为它将与自动布局规则冲突
。这种代码的平静改变了框架,因此如果您试图将此代码用于自动布局,它将不起作用


[原始答案]

您还可以创建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)

您只需要实现TranslatesAutoResizengMaskintoConstraints,通过将其设置为true,您就可以通过代码编写约束,而无需执行其他操作

示例:view.translatesAutoResizezingMaskintoConstraints=true

//此代码将起作用

view.frame = CGRect(x: self.playerChatBackground.frame.origin.x, y:                                     
self.playerChatBackground.frame.origin.y, width: 100.0, height: 36.0)

对我来说很有效!确保已连接插座,并在
viewDidLoad
实现的开始部分调用
super.viewDidLoad()
!约束方法非常有效。感谢您澄清汽车布局,很好的解决方案是你应得的。我试着用一种简单的方式改变uiview的高度,不像创建一个框架,然后分配一个框架,你的解决方案很适合我的需要。这个解决方案在iOS 8、Xcode 7.2中对我来说也很有吸引力。我使用这种技术来释放iad横幅在没有收到广告时所占据的不动产。我通过将“高度限制”更改为1来实现此目的。@mmilo您能告诉我如何准确创建高度限制吗?!我在interface builder中找不到任何选项来为实际视图添加约束!将禁用约束选项。我需要调整整个视图(而不是特定子视图)的高度。代码7.3.1。谢谢