【问题标题】:Programmatically changing the height of a Storyboard view以编程方式更改情节提要视图的高度
【发布时间】:2017-10-18 17:41:23
【问题描述】:

背景:

我在故事板中有一个普通的UIView(称为statusView),其高度为30,四个约束固定在前导、尾随、顶部空间到超级视图,底部空间到下面的视图它。

问题:

我的目标是改变statusView 的高度,包括在用户执行操作时动画帧变化。因此,statusView 可以与0 一样短,也可以与100 一样高。

我的期望是,鉴于statusView 被限制在超级视图及其下面的最近邻居,当我改变它的高度时,它应该自动“推送”下面的视图。

只是为了测试,在viewDidAppear 中,我调用了以下代码:

self.statusView.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 100.0)
self.statusView.setNeedsDisplay()

问题:尽管我将其设置为 0,但 statusView 的高度仍为 30。

编辑:张贴Storyboard设置

这是statusView 的设置:

【问题讨论】:

    标签: ios uiview uistoryboard


    【解决方案1】:

    如果您正在使用自动布局并想为层次结构中的视图设置显式高度,则应使用自动布局来执行此操作。我假设在界面生成器中设置了高度限制。

    为约束创建一个IBOutlet 并将其链接到界面生成器中。

    @IBOutlet weak var statusViewHeightConstraint: NSLayoutConstraint!
    

    然后,假设这只是一个高度为常数的大小约束,只需在代码中更改它:

    statusViewHeightConstraint.constant = 100
    

    您可以通过在修改约束后立即将布局调用包装在动画块中来动画化此更改。像这样的:

    UIView.animateKeyframes(withDuration: 0.2, delay: 0.0, options: [.beginFromCurrentState, .calculationModeCubic], animations: {
      self.view.layoutIfNeeded()
    }, completion: nil)
    

    【讨论】:

    • 这是一个好主意 - 改变高度限制。我可以通过约束为高度变化设置动画吗?
    • 太棒了。非常感谢!
    猜你喜欢
    • 2019-10-15
    • 2016-12-04
    • 2012-05-11
    • 2013-08-08
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    相关资源
    最近更新 更多