在 ScrollView 中移动子视图
Posted
技术标签:
【中文标题】在 ScrollView 中移动子视图【英文标题】:Moving subviews in ScrollView 【发布时间】:2013-10-09 04:48:37 【问题描述】:所以我有一个滚动视图,其中有 3 个其他视图作为子视图。使用滚动视图在 3 个子视图之间进行分页,这些子视图的控制器存储在数组中。
- (void)viewDidLoad
[self loadData];
self.uiScrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
[self.uiScrollView setPagingEnabled:YES];
[self.uiScrollView setContentSize:CGSizeMake(self.view.frame.size.width*3, self.view.frame.size.height)];
self.uiScrollView.delegate = self;
[self.view addSubview:self.uiScrollView];
self.uiPhotoCollectionViewControllers = [[NSMutableArray alloc] init];
int numberOfOtherViews = 3;
int subViewOffset = 0;
for (int i = 0; i < numberOfCollectionViews; i++)
UIViewController* uiViewController = [[UIPhotoCollectionViewController alloc] initWithData:dataArray];
// add offset to the view of the controller
[self.uiScrollView addSubview:uiViewController.view];
[self.uiViewControllers addObject:uiViewController];
uiViewController.view.frame = CGRectOffset(uiViewController.view.frame,subViewOffset,0.0f);
subViewOffset = subViewOffset + uiViewController.view.frame.size.width;
如果我稍后想将滚动视图中间的视图与第一个视图切换,我将如何在不删除所有滚动视图子视图并替换它们的情况下进行此操作。
【问题讨论】:
【参考方案1】:不替换是不可能的,但是你可以通过像这样交换 self.uiViewControllers 数组中的对象来做到这一点
[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
然后在交换对象后,您可以通过遍历整个数组来添加子视图。
【讨论】:
我试过这样做。也许我在某个地方出错了。我只是在删除后将它们重新添加为子视图,并使用 exchangeObjectAtIndex 方法切换了控制器数组中的控制器。这有意义吗? 只是在将它们添加为子视图之前进行交换,而不是在将它们添加为子视图之后 我创建了一个单独的方法来在控制器数组中交换它们,然后调用另一个方法将它们重新添加为子视图以滚动视图。这就是你的意思甘根吗? 知道为什么您认为它不会正确地将它们放回滚动视图中。我在 for 循环中为数组中的每个视图控制器执行此操作: UIViewController* uiViewController = [self.uiViewControllers objectAtIndex:i]; [self.uiScrollView addSubview:[uiViewController view]];以上是关于在 ScrollView 中移动子视图的主要内容,如果未能解决你的问题,请参考以下文章
在Scroll View的高度动画后,UIScrollView的子视图不响应触摸
带有 UIControl/UIButton 子视图的 ScrollView/TableView 在 iOS 8 下不可滚动
UIColectionView Vertical Scrolling inside a Scrollview - 在集合视图区域中滚动时禁用滚动视图的滚动