繁体   English   中英

关于在Swift中按下按钮时改变UIView高度的问题

[英]Question about changing height of UIView when button is pressed in Swift

我正在制作 function ,当按下按钮时 UIView 的高度会增加和减少。

当 UIView 的高度减小时,该值在 storyboard 中创建了一个布局,当 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)
    }

如果您使用上面的代码按下按钮,它什么也不做。 我应该怎么办?

请按照以下步骤操作:-

  • 在 storyboard 中定义高度约束。
  • 创建高度约束的 IBOutlet
  • 然后按下按钮,增加/减少 textview 的高度,例如:-

     textViewHeightConstant.constant = someValue

1.为您尝试扩展的视图的高度设置一些默认值。 然后,如果您使用 StoryBoard 为您的 ViewConroller 创建一个 IBOutlet,并删除弱引用(那是因为我们将停用高度锚,如果它很弱并且您停用它, ARC将取消分配它。如果您要它以编程方式将高度锚点存储在局部变量中。所以它应该像这样:

@IBOutlet var yourViewHeightAnchor: NSLayoutConstraint!

2. 将目标添加到您的按钮,或者如果您使用 StoryBoard 或 Xib 将 IBAction 拖动到您的 ViewController。 单击按钮时,您唯一的工作是停用/激活高度锚。 (激活将服务于崩溃)

@IBAction func expandClicked(_ sender: Any) {
    yourViewHeightAnchor.isActive.toggle()
}

如果您希望使用一些 animation 进行展开/折叠,您的expandClicked function 应该如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM