将多个容器视图放在ios中的分页UIScrollView中

时间:2014-07-01 15:18:20

标签: ios objective-c uiscrollview autolayout

我在UIScrollView中有一个UIViewController。现在我想在此滚动视图中添加多个容器视图。每个容器视图的大小与滚动视图的大小相同,即,一个容器视图基本上填充滚动视图。现在,我将通过设置容器视图的框架和更改滚动视图的contentSize,为此滚动视图添加多个容器视图。

这会在轮换中产生问题。当设备从纵向旋转到横向时,则一次显示2个容器视图。我想在旋转时调整这些容器视图的大小。我可以这样做的一种方法是在旋转设备时更新所有容器视图的帧(添加到目前为止的滚动视图)。

但我想使用自动布局约束来处理这个问题。但是在向滚动视图添加容器时,我无法获得要使用的约束。

2 个答案:

答案 0 :(得分:0)

尝试使用UICollectionView。设置collectionView的大小以匹配显示,并将单元格大小设置为与集合视图几乎相同。在集合视图周围放置自动布局约束,以保持其边缘和超视图之间的距离不变。

使用CollectionViewFlowLayoutDelegate方法

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

控制细胞的大小。以下是我自己的一个项目的例子。

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
if (UIDeviceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) {
    if (iPhone5) return CGSizeMake(470.f, 150.f);
    else return CGSizeMake(380.f, 150.f);
}
if (iPhone5) return CGSizeMake(270.f, 325.f);
else return CGSizeMake(272.f, 390.f);
}

将容器视图放在单元格内,并将自动布局约束从容器边缘应用到单元格。

最后,覆盖集合视图布局并将滚动方向设置为水平。

答案 1 :(得分:0)

任何人都在这里登陆同一个问题,有一篇关于在使用autolayout时处理UIScrollView内部元素的好帖子https://www.natashatherobot.com/ios-autolayout-scrollview/。这完全值得一读。

简要总结:

  1. UIScrollView应该只有一个子视图。
  2. 除了添加您通常会遇到的约束外,请考虑在您的滚动视图的超级视图(主视图)和滚动视图的唯一子视图(内容视图)之间需要等宽度约束。
  3. 根据每种情况,您可能需要通过代码进行少量调整,这很好。