【发布时间】:2014-06-22 15:04:40
【问题描述】:
我使用 UIScrollView 作为我的分页滚动视图,pagesScrollView。在其中,我放置了专门用于缩放的单个 UIScrollView。在其中的每一个中,我都有一个视图,它是应该可以缩放的页面项目。所有这些都在带有半透明导航栏的 UINavigationController 中。
我的pagesScrollView 有contentInset.top = 64 和bounds.origin.y = -64(这对我来说似乎很奇怪,但这是系统自动为我设置的),这很好用。我的屏幕看起来很棒!
但是,在我滚动pagesScrollView 哪怕一点点之后,只要调用scrollViewWillEndDragging,pagesScrollView 就会开始从bounds.origin.y = -64 到bounds.origin.y = 0 的动画变化,这会导致我的页面项目被遮挡通过导航栏。
左边是加载时的样子,右边是我拖动几个像素然后放开后的样子,它在导航栏下向上滑动(因为 bounds.origin.y 去了到 0)。
问题是我没有任何代码可以改变边界,并且我在各种滚动委托方法中没有任何代码可以做任何事情。我添加了一堆滚动委托方法,并且刚刚添加了 NSLog(),这样我就可以确定更改发生的时间/地点,但它并没有在我的代码中的任何地方发生。
所以,我不知道我可以向您展示什么代码来帮助您帮助我。
编辑:我从头开始构建了一个新项目以删除所有其他变量。我将一个裸 UIViewController 放入 UINavigationController。我将一个 UIScrollView 放入我的视图中,整个视图的大小。以下代码是整个项目。
事实证明,问题(如下所述)仅在 UIScrollView 上启用 PAGING 后才会出现!什么? :)
这里是一个下载基本项目的链接,其中只有几行代码来演示该问题。只需单击滚动视图,您就会看到它随着边界的变化而向上移动。 http://inadaydevelopment.com/stackoverflow/WeirdScrollViews.zip
如何在滚动视图上启用分页,而不会在滚动和移动导航栏下的所有内容时出现边界问题?
可以将导航栏设置为不透明并避免该问题,但理想的情况是具有标准的 iOS7 行为,以便在内容视图缩放后,允许内容位于导航栏下方并应通过半透明正常。
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSArray *colors = @[
[UIColor blueColor],
[UIColor orangeColor],
[UIColor magentaColor],
];
NSArray *zoomerColors = @[
[UIColor greenColor],
[UIColor yellowColor],
[UIColor purpleColor],
];
self.scroller.pagingEnabled = YES;
[self.scroller setContentSize:CGSizeMake(self.scroller.frame.size.width*colors.count, self.scroller.frame.size.height)];
CGRect subviewFrame = CGRectMake(0, 0, 160, 240);
for (int index=0; index < colors.count; index++) {
UIColor *color = [colors objectAtIndex:index];
UIColor *zoomerColor = [zoomerColors objectAtIndex:index];
UIView *subview = [[UIView alloc] initWithFrame:subviewFrame];
subview.backgroundColor = color;
CGRect zoomerFrame = CGRectMake(index*self.scroller.frame.size.width, 0, self.scroller.frame.size.width, self.scroller.frame.size.height);
UIScrollView *zoomer = [[UIScrollView alloc] initWithFrame:zoomerFrame];
[zoomer addSubview:subview];
zoomer.backgroundColor = zoomerColor;
[self.scroller addSubview:zoomer];
}
}
【问题讨论】:
-
如果你使用 bounds 它的 x 和 y 点是 0,0 你需要使用 frame。
-
放置scrollViewWillEndDragging的代码或放置单个UIScrollViews的代码
-
@nitinkachhadiya,我根本没有改变界限,界限从 -64 开始......这对我来说看起来不对,但这是系统自己设置的。
-
@iPatel,我已经添加了您要求的代码,但正如我所说,它是空的。在我添加它之前,我什至没有在我的类中使用该代码方法,这样我就可以在其中放置一个 NSLog()。
标签: ios objective-c ios7 uiscrollview uiedgeinsets