Ios 在Swift中按下按钮时更改UIView高度的问题

Ios 在Swift中按下按钮时更改UIView高度的问题,ios,swift,Ios,Swift,我正在做一个功能,当按下按钮时,UIView的高度会增加或减少 当UIView的高度减小时,该值将在情节提要中创建布局;当UIView的高度增大时,该值将为UITextView的高度 上图是在UIView拉伸之前。按下照片底部的按钮以拉伸UIView 上图是UIView拉伸后的图像。如果按上图底部的按钮,UIView将再次缩小 我想知道的第一件事是增加UIView高度的代码 @IBOutlet weak var bookInfoView: UIView! @IBOutlet

我正在做一个功能,当按下按钮时,UIView的高度会增加或减少

当UIView的高度减小时,该值将在情节提要中创建布局;当UIView的高度增大时,该值将为UITextView的高度

上图是在UIView拉伸之前。按下照片底部的按钮以拉伸UIView

上图是UIView拉伸后的图像。如果按上图底部的按钮,UIView将再次缩小

我想知道的第一件事是增加UIView高度的代码

    @IBOutlet weak var bookInfoView: UIView!
    @IBOutlet weak var bookInfoVieweBtn: UIButton!
    @IBOutlet weak var bookInfoTextView: UITextView!

    @IBAction func bookInfoViewBtnTapped(_ sender: Any) {
        print("##bookInfoViewBtnTapped!")
        let f = bookInfoView.frame
        let textView = bookInfoTextView.frame
        bookInfoView.frame = CGRect(x: f.origin.x, y: f.origin.y, width: f.width, height:      textView.height)
    }
如果使用上面的代码按下按钮,它将不起任何作用。我应该怎么做?

遵循以下步骤:-

  • 在情节提要中定义高度约束
  • 创建高度约束的出口
  • 然后按下按钮,增加/减少文本视图的高度,如:-

    textViewHeightConstant.constant = someValue
    
遵循以下步骤:-

  • 在情节提要中定义高度约束
  • 创建高度约束的出口
  • 然后按下按钮,增加/减少文本视图的高度,如:-

    textViewHeightConstant.constant = someValue
    

1.为要展开的视图的高度设置一些默认值。然后,如果您正在使用故事板,请为ViewConroller创建一个IBOutlet,并删除弱引用(这是因为我们将停用高度定位点,如果它很弱,而您将其停用,则将取消对它的定位。如果您以编程方式进行定位,则只需将高度定位点存储在局部变量中。因此,它应该类似于以下内容:

@IBOutlet var yourViewHeightAnchor: NSLayoutConstraint!
@IBAction func expandClicked(_ sender: Any) {
    UIView.animate(withDuration: 0.6, animations: {
        self.yourViewHeightAnchor.isActive.toggle()
        self.view.layoutIfNeeded()
    })
}
2.将目标添加到按钮中,或者如果使用故事板或Xib将iAction拖到ViewController中。单击按钮时,您唯一的任务是取消激活/激活高度锚。(激活将用于折叠)

如果您希望使用一些动画来展开/折叠,您的
expandClicked
函数应该如下所示:

@IBOutlet var yourViewHeightAnchor: NSLayoutConstraint!
@IBAction func expandClicked(_ sender: Any) {
    UIView.animate(withDuration: 0.6, animations: {
        self.yourViewHeightAnchor.isActive.toggle()
        self.view.layoutIfNeeded()
    })
}

1.为您尝试展开的视图的高度设置一些默认值。然后,如果您使用的是故事板,请为您的ViewConroller创建一个IBOutlet,并删除弱引用(这是因为我们将停用高度定位点,如果它很弱,而您将其停用,则将取消对它的定位。如果您以编程方式进行定位,则只需将高度定位点存储在局部变量中。因此,它应该类似于以下内容:

@IBOutlet var yourViewHeightAnchor: NSLayoutConstraint!
@IBAction func expandClicked(_ sender: Any) {
    UIView.animate(withDuration: 0.6, animations: {
        self.yourViewHeightAnchor.isActive.toggle()
        self.view.layoutIfNeeded()
    })
}
2.将目标添加到按钮中,或者如果使用故事板或Xib将iAction拖到ViewController中。单击按钮时,您唯一的任务是取消激活/激活高度锚。(激活将用于折叠)

如果您希望使用一些动画来展开/折叠,您的
expandClicked
函数应该如下所示:

@IBOutlet var yourViewHeightAnchor: NSLayoutConstraint!
@IBAction func expandClicked(_ sender: Any) {
    UIView.animate(withDuration: 0.6, animations: {
        self.yourViewHeightAnchor.isActive.toggle()
        self.view.layoutIfNeeded()
    })
}

我想要的不是调整bookInfoTextView的高度,而是调整bookInfoView的高度以适应bookInfoTextView。即使bookInfoTextView的高度发生变化,bookInfoView的高度也不应该相同。请尝试一下。它将根据您的textview高度工作,无论是常量还是您计算它。我想要什么不是调整bookInfoTextView的高度,而是调整bookInfoView的高度以适应bookInfoTextView。即使bookInfoTextView的高度发生变化,bookInfoView的高度也不应相同。请尝试一下。它将根据textview的高度工作,无论是常量还是计算值。