5

我在使用 iOS 7 的 iPhone 中遇到 UIScrollView 的问题

我以编程方式创建了水平 UIScrollView,我添加了一些彩色按钮,最后我将滚动定位在屏幕顶部。

滚动是自定义滚动,所以我可以处理

- (BOOL)touchesShouldCancelInContentView:(UIView *)view {
  return YES;
}

scroll.canCancelContentTouches = YES;
scroll.delaysContentTouches = YES;

允许滚动移动,即使我按下按钮

除了滚动不动的屏幕顶部,一切都很完美。但我可以按下按钮。如果我向下滚动(大约 30 像素),我可以在其上部滚动它(内容大小和框架是正确的)

我使用 info.plist 设置“查看基于控制器的状态栏外观 = NO”删除了 iOS 7 的状态栏

似乎在状态栏区域我无法拖动滚动条。

有什么建议么?

在此处输入图像描述

编辑:有趣的是,如果在滚动之前,您拉下通知选项卡,那么滚动即使在上部也可以工作。当通知标签向上移动时,问题返回。好像第一次触摸是由选项卡管理的,而不是将其传递给滚动条

4

2 回答 2

0

是的,在纯自动布局环境中 UIScrollView 发生了一些奇怪的事情。第二十次重读 iOS SDK 6.0 发行说明,我发现:

请注意,您可以通过在视图和滚动视图的子树之外的视图(例如滚动视图的超级视图)之间创建约束,使滚动视图的子视图看起来浮动(不滚动)在其他滚动内容之上。

解决方案

将您的子视图连接到外部视图。换句话说,就是嵌入了滚动视图的视图。

由于 IB 不允许我们在 imageView 和滚动视图的子树之外的视图之间设置约束,例如滚动视图的超级视图,所以我已经在代码中完成了。

- (void)viewDidLoad {
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
    [self.view removeConstraints:[self.view constraints]];
    [self.scrollView removeConstraints:[self.scrollView constraints]];
    [self.imageView removeConstraints:[self.imageView constraints]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_scrollView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_scrollView)]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_scrollView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_scrollView)]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_imageView(700)]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_imageView)]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_imageView(1500)]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_imageView)]];
}

和 !它作为魅力!

于 2013-10-10T05:45:31.773 回答
0

你的目标是iOS7或更早的版本吗?如果是 iOS7 并且您更改为 iOS6.1 并获得预期的行为,那么它很可能是错误。

另一种方法是检查同事已经建议的自动布局约束,当然还要观察与它相关的 contentFrame 属性。

于 2013-10-10T05:54:02.763 回答