无法使用 XCode 8 将 UIView 上方的 UIScrollView 插入到另一个场景

Unable to insert UIScrollView above UIView to another scene using XCode 8

我有一个现有的 iPad 应用程序(纵向模式),我想在 XCode 中添加横向模式。我已经能够在第一个简单视图上做到这一点,如下所示,通过将 XCode 中的 class 更改为 UIScrollView 并且 UIView 落在它下面的行中(我相信 UIView 是由 [=25 添加的=],但不确定')。滚动视图在横向模式下完美运行。

当我尝试对下一个场景做同样的事情时,它不允许我再次更改顺序,如下图所示;我不确定为什么它不允许同样的事情:

有什么想法吗?还有其他方法可以实现吗?

更新 这是显示尝试在 UIVIewController 中插入 UIScrollView 的位置的图像(Book Details 是 UIViewController;Book Detail View 是 UIView):

Select Book Details UIViewController 在故事板中,然后 select 根视图。删除它,然后将 UIScrollView 拖放到 UIViewController。您的根视图现在应该是 UIScrollView

注意:我个人更喜欢下面的视图层次结构:

|---UIView
     |---UIScrollView
         |---UIView //(to act as a container)
              |---UIView
              |---UIView
              |---UIView
              |---UIView

允许您根据需要非常轻松地缩放应用程序,同时还允许 autoLayout 非常轻松地管理设置 UIScrollView

的内容大小

我们在第二个控制器上执行此操作: 1. 然后从UIViewController场景中删除主UIView, 2. 在上面添加一个UIScrollView。 3. 添加 UIView 作为 UIScrollView 子视图。

您将拥有完美的顺序和想要的结果,就像在第一个场景中一样。 在您的情况下 select Bottom layout Guide 下的 View,按退格键,将 UIScrollView 拖放到该 Book Details 上。干杯。

这是结果:

如何处理 SCROLLVIEW

  1. 您的 navigation bar 始终位于顶部,高度为 44px,顶部 space 为 20px(顶部 20px 用于状态栏,即您在设备中看到的充电、网络等图标)。

navigation bar 固定在顶部的原因 是无论用户在 VC 中的什么地方,您都必须向他展示 VC 他当时在场,否则您的应用质量可能会变低(我说可能是)。毕竟你可以在 UIScrollView 中添加 navigation Bar 这是你的选择。

您看到的顶部绿色视图,我只是将视图作为高度 20pxstatusBar 来显示差异。

  1. 现在在 ViewController 的其余部分添加 UIScrollView 并给出以下约束:

    • 顶部到导航栏0px
    • 前导、尾随、底部到超级视图 0

现在您的 VC 如下所示。红点表示可以约束缺失。不要担心,直到 UIScrollView 中的组件未正确设置它会显示相同的错误。

  1. 现在在你的 UIScrollView(说 viewMain)中添加一个 UIView 并给出这样的约束

    • 顶部、底部、前导、尾随 scrollview0
    • 与你等宽viewVCviewVC 是 VC 的观点。当您使用新的 UIViewController 时,您会看到此视图。现在你的 UI 会变成

您的视图层次结构将类似于

这里我假设您只是在垂直方向而不是水平方向滚动视图。

  1. 现在我要在scrollview中添加5个不同高度的视图,看看吧。

  2. viewMain中添加一个视图(说viewYellow)并在下面给出约束;

    • top, leading trailing to mainView as 0px
    • 身高180px

现在你的 UI 会像

  1. 现在与 step 4 相同,再添加四个视图(viewGreen、viewBlue、viewRed、viewPurple)并给出如下约束

      • viewGreen : 1. 顶部到 viewYellow 0px 2. 前导尾随 mainView 作为 0px 和 3. 高度 150px
      • viewBlue : 1. 顶部到 viewGreen 0px 2. 前导到 mainView 作为 0px 和 3. 高度 80px
      • viewBlue : 1. 顶部到 viewGreen 0px 2. 前导到 mainView 作为 0px 和 3. 高度 80px
      • viewRed : 1. 顶部到 viewBlue 0px 2. 前导尾随 mainView 作为 0px 和 3. 高度 140px
      • viewPurple : 1. 顶部到 viewRed 0px 2. 前导到 mainView 作为 0px 和 3. 高度 128px。 4.底部到mainView0px.

现在您的 UI 和视图层次结构将如下所示

不用担心 viewPurple,因为它很少出现在 UI 中,但在层次结构中可用。 scrollView非常安全。参见

注意: UIViewController 中没有可用的约束错误和警告,因为正如我准备好的那样,当您正确设置 scrollView 的内部组件时约束约束错误将得到解决。

重要: ScrollView 高度是如何计算的

当您将具有顶部、底部和高度约束的每个视图的约束设置为 mainView 时,mainView 高度计算如下等式

mainView.height = viewYellow.top + viewYellow.height + .... for all view + viewPurple.bottom

scrollView身高计算如下:

scrollView.height = mainView.height

但是每个视图的高度都是固定的,所以旋转高度也是一样的。

最终输出

纵向

横向

None 的答案解决了更改 现有 应用程序的问题,因此我请求 Apple 技术支持。他们也没有解决,而是给了我一些文档让我看看。 @Aragunz 可能最接近 was/is XCode 8 内的问题。我剩下的唯一选择是从头开始重写故事板,保存现有的 类.