【问题标题】:UIViewController layout changesUIViewController 布局更改
【发布时间】:2019-02-28 20:24:10
【问题描述】:

我有一个 UIViewController,它有 4 个子视图——左视图、右视图、底视图和中心视图。中心视图实际上嵌入了另一个视图控制器(AVPlayerViewController)。按一下按钮,我希望更改左视图和底视图并调整中心视图的大小。中心视图这次也将有一个不同的前导约束,因为它之前挂钩的左视图现在不再存在了。

使用自动布局和情节提要完成此类事情的最简单方法是什么? Storyboards 中有没有一种方法可以定义相同 UIViewController 和改变状态的两种设计,都带有动画?

【问题讨论】:

    标签: ios uiviewcontroller uikit uistoryboard ios-autolayout


    【解决方案1】:

    实现这一点的最佳方法是在代码中操纵约束,

    Storyboard 仅以初始状态直观地声明 UIViews

    因为您不能为同一个 UIViewController 提供 2 个设计,但您可以肯定地操纵它的状态。

    在代码中,您可以以干净的方式为约束设置动画、删除、添加和调整大小。

    目前UIStoryBoard 不支持为相同的UIViewController 设计两种设计,据我从您的问题中得到的是,您在做动画和约束调整大小等简单的事情,而实现这一点的方法是操纵约束在代码中。

    如何:

    只需将约束的@IBOutletUIStoryBoard 拖到UIViewController 类中,即可调整其属性,例如.constant.firstAnchor

    捷径回答:不,你不能在情节提要中为相同的UIViewController 提供 2 个设计

    【讨论】:

      【解决方案2】:

      有很多方法可以做到这一点。选择最适合您的方式

      1. 您可以使用两个 容器 视图。一次,一个人会被隐藏起来 另一个将显示。在每个容器视图的嵌入控制器中进行单独设计

        在这种情况下,您将有两个视图控制器。您必须管理它们之间的通信(如果有)


      1. 您可以使用两个 UIView 的。一次,一个人会被隐藏起来 另一个将显示。为情节提要中的每个视图进行单独的设计。设计时,将 alpha 设置为 1 为 0。这样您就可以设计另一个视图

        在这种情况下,一个视图控制器里面有两个视图。相互重叠。根据条件显示一个并隐藏另一个


      1. 使用动画在代码中操作约束。设计和设置约束。然后制作约束的出口并更改yourConstraint.constantyourConstraint.anchor

      【讨论】:

      • 这个答案最接近,但是,我已经在中心视图中嵌入了一个视图控制器(AVPlayerViewController)。它需要在两个视图(或选项 1 中的两个视图控制器)之间共享。我们如何分享观点?
      • 你的中心视图是一个嵌入了 AVPlayerViewController 的容器视图?
      • 是的。这是正确的。虽然它是 5 个视图之一。但这是两种设计之间唯一的共同观点。不过,这两种布局的大小不同。我想我可以使用 UIViewController 包含 API 将 AVPlayerViewController 移动到另一个视图而不会出现问题?
      • 如果我需要将两个视图放在不同的容器视图中,我会感到头疼。我已经添加了很多约束。如何在不破坏迄今为止精心设计的所有内容的情况下将所有视图放入容器视图中?
      • 另外,在 Storyboard 中设置 alpha 0 也不起作用。这使得通过点击在下面的视图中进行更改变得非常困难(所有点击都是指前面的视图)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多