使用 NavigationBar 禁用 UIScrollView 垂直滚动
Posted
技术标签:
【中文标题】使用 NavigationBar 禁用 UIScrollView 垂直滚动【英文标题】:Disable UIScrollView vertical scrolling with NavigationBar 【发布时间】:2012-11-01 18:09:11 【问题描述】:所以我看过很多其他关于此的帖子,我想我几乎都试过了。我不希望这是重复的,但我无法解决我的问题。我有这样的设置:
当我到达我的滚动视图控制器时,我可以很好地翻页,但我也可以垂直移动图片。我认为这与 NavigationBar 强制向下滚动 ScrollView 框架有关,但仍将框架设置为全屏大小。如何防止滚动视图视图控制器上的任何垂直滚动?我的 .m 如下:
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
self.navigationController.navigationBarHidden = NO;
i = 0;
_PhotoBundle = [[NSBundle mainBundle] pathsForResourcesOfType:@".jpg"inDirectory:@"Dog_Images"];
_PhotoArray = [[NSMutableArray alloc] initWithCapacity:_PhotoBundle.count];
for (NSString* path in _PhotoBundle)
[_PhotoArray addObject:[UIImage imageWithContentsOfFile:path]];
for (int x = 0; x < _PhotoArray.count; x++)
CGRect frame;
frame.origin.x = self.mainScroll.frame.size.width * x;
frame.origin.y = 0;
frame.size = self.mainScroll.frame.size;
UIImage *nextImg = [[UIImage alloc] init];
nextImg = [_PhotoArray objectAtIndex:x];
UIImageView *nextIV = [[UIImageView alloc] initWithFrame:frame];
[nextIV setImage:nextImg];
[self.mainScroll addSubview:nextIV];
//NSLog(@"Pass %d", x);
self.mainScroll.contentSize = CGSizeMake(self.mainScroll.frame.size.width * _PhotoArray.count, self.mainScroll.frame.size.height);
非常感谢!!
【问题讨论】:
viewDidAppear 中NSLog(@"self.mainScroll.frame:(%f,%f,%f,%f)", self.mainScroll.frame.origin.x, self.mainScroll.frame.origin.y, self.mainScroll.size.height, self.mainScroll.size.width);
的输出是什么?这是您所期望的,还是有所不同?
ScrollTest[361:c07] self.mainScroll.frame:(0.000000,20.000000,460.000000,320.000000) 那是在我将 contentSize 更改为 1.0 之前
有趣的是,当我在替换 1.0 时这样做是一样的:ScrollTest[418:c07] self.mainScroll.frame:(0.000000,20.000000,460.000000,320.000000)
有趣...这似乎是机器中的幽灵。很高兴你知道了!
【参考方案1】:
于是我找到了一篇解释得很完美的帖子:
How to disable just vertical scrolling in a UIScrollView?
当我改变我的
CGSizeMake(self.mainScroll.frame.size.width * _PhotoArray.count, self.mainScroll.frame.size.height);
到
CGSizeMake(self.mainScroll.frame.size.width * _PhotoArray.count, 1.0);
它使 contentSize 大于界限......我读过的东西,但没有完全理解。我希望这可以帮助其他陷入困境的人......
【讨论】:
【参考方案2】:UIScrollView
仅当 -contentSize
设置为大于其框架时才会滚动其内容。因此,当您设置 self.mainScroll.contentSize
时,它的 contentSize.height
比它的框架还要多。
在使用它的类之前至少尝试阅读 Apple 的文档。这很无聊。但是薪水可以弥补所有无聊的东西。
顺便说一句。您错误地使用 UIScrollView 来显示 UIImageView 对象。尝试观看 Apple WWDC 会话(可以从 iTunes 下载) - 关于如何仅使用三个 UIImageView 对象来绘制无尽的 UIScrollView 分页,有两到三个会话
Apple's documentation on UIScrollView
【讨论】:
感谢您的回答。我已经阅读了很多苹果的资料,我正在 iTunes 中寻找 WWDC 的资料(到目前为止还没有出现)。我知道 constentSize.height,这就是为什么我认为它可能与 NavigationBar 相关联。 我在 iTunes 上找不到 WWDC 的内容。你有我可以搜索的特定标题吗?再次感谢。 您还有其他想法吗?我没有发现这个答案很有帮助,因为我已经阅读了大部分文档并且在 iTunes 上找不到 WWDC 的东西。谢谢 嗯,这是 2011 年 WWDC 会议的链接:developer.apple.com/videos/wwdc/2011,您还应该寻找“高级滚动查看技术”视频会议。此外,您必须购买苹果开发者计划才能访问 Apple WWDC 会议。并且在 2011 年 WWDC 之前有一个会议 - developer.apple.com/videos/wwdc/2010(查找标题“使用滚动视图设计应用程序”) 在看了示例代码和视频之后,他们基本上在做同样的事情。他们仍然为每个图像创建图像视图,只是在分层方面做得更好。虽然他们也没有使用情节提要,所以我需要学习如何翻译并将其链接到情节提要中。感谢您的指导。以上是关于使用 NavigationBar 禁用 UIScrollView 垂直滚动的主要内容,如果未能解决你的问题,请参考以下文章
禁用同时 rightBarButton / tapGestureRecognizer 触摸