无法使用 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
- 您的
navigation bar
始终位于顶部,高度为 44px
,顶部 space 为 20px
(顶部 20px
用于状态栏,即您在设备中看到的充电、网络等图标)。
将 navigation bar
固定在顶部的原因 是无论用户在 VC 中的什么地方,您都必须向他展示 VC 他当时在场,否则您的应用质量可能会变低(我说可能是)。毕竟你可以在 UIScrollView
中添加 navigation Bar
这是你的选择。
您看到的顶部绿色视图,我只是将视图作为高度 20px
的 statusBar
来显示差异。
现在在 ViewController
的其余部分添加 UIScrollView
并给出以下约束:
- 顶部到导航栏
0px
- 前导、尾随、底部到超级视图
0
。
现在您的 VC 如下所示。红点表示可以约束缺失。不要担心,直到 UIScrollView
中的组件未正确设置它会显示相同的错误。
现在在你的 UIScrollView
(说 viewMain)中添加一个 UIView
并给出这样的约束
- 顶部、底部、前导、尾随
scrollview
为 0
- 与你等宽
viewVC
。 viewVC
是 VC 的观点。当您使用新的 UIViewController
时,您会看到此视图。现在你的 UI 会变成
您的视图层次结构将类似于
这里我假设您只是在垂直方向而不是水平方向滚动视图。
现在我要在scrollview
中添加5个不同高度的视图,看看吧。
在viewMain
中添加一个视图(说viewYellow)并在下面给出约束;
- top, leading trailing to
mainView
as 0px
- 身高
180px
现在你的 UI 会像
现在与 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.底部到mainView
0px
.
现在您的 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 内的问题。我剩下的唯一选择是从头开始重写故事板,保存现有的 类.
我有一个现有的 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
- 您的
navigation bar
始终位于顶部,高度为44px
,顶部 space 为20px
(顶部20px
用于状态栏,即您在设备中看到的充电、网络等图标)。
将 navigation bar
固定在顶部的原因 是无论用户在 VC 中的什么地方,您都必须向他展示 VC 他当时在场,否则您的应用质量可能会变低(我说可能是)。毕竟你可以在 UIScrollView
中添加 navigation Bar
这是你的选择。
您看到的顶部绿色视图,我只是将视图作为高度 20px
的 statusBar
来显示差异。
现在在
ViewController
的其余部分添加UIScrollView
并给出以下约束:- 顶部到导航栏
0px
- 前导、尾随、底部到超级视图
0
。
- 顶部到导航栏
现在您的 VC 如下所示。红点表示可以约束缺失。不要担心,直到 UIScrollView
中的组件未正确设置它会显示相同的错误。
现在在你的
UIScrollView
(说 viewMain)中添加一个UIView
并给出这样的约束- 顶部、底部、前导、尾随
scrollview
为0
- 与你等宽
viewVC
。viewVC
是 VC 的观点。当您使用新的UIViewController
时,您会看到此视图。现在你的 UI 会变成
- 顶部、底部、前导、尾随
您的视图层次结构将类似于
这里我假设您只是在垂直方向而不是水平方向滚动视图。
现在我要在
scrollview
中添加5个不同高度的视图,看看吧。在
viewMain
中添加一个视图(说viewYellow)并在下面给出约束;- top, leading trailing to
mainView
as0px
- 身高
180px
- top, leading trailing to
现在你的 UI 会像
现在与
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.底部到mainView
0px
.
现在您的 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 内的问题。我剩下的唯一选择是从头开始重写故事板,保存现有的 类.