iScrollView不能在iOS7的iPhone顶部屏幕中滚动

iScrollView不能在iOS7的iPhone顶部屏幕中滚动,iphone,objective-c,uiscrollview,ios7,Iphone,Objective C,Uiscrollview,Ios7,我对iOS 7版iPhone中的UIScrollView有问题 我以编程方式创建了水平UIScrollView,添加了一些彩色按钮,最后将滚动条定位在屏幕顶部 卷轴是自定义卷轴,因此我可以处理 - (BOOL)touchesShouldCancelInContentView:(UIView *)view { return YES; } 及 允许滚动条移动,即使我按下按钮 一切都很完美,除了屏幕顶部,滚动条不会移动。但是我可以按按钮。 如果我向下滚动(大约30px),我可以滚动它的上部(内容

我对iOS 7版iPhone中的UIScrollView有问题

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

卷轴是自定义卷轴,因此我可以处理

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

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

一切都很完美,除了屏幕顶部,滚动条不会移动。但是我可以按按钮。 如果我向下滚动(大约30px),我可以滚动它的上部(内容大小和帧正确)

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

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

有什么建议吗

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

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

请注意,通过在视图和滚动视图子树外的视图(如滚动视图的superview)之间创建约束,可以使滚动视图的子视图在其他滚动内容上浮动(而不是滚动)

解决方案

将子视图连接到外部视图。换句话说,是指嵌入了scrollview的视图

由于IB不允许我们在imageView和滚动视图子树之外的视图(例如滚动视图的superview)之间设置约束,因此我已经在代码中完成了这项工作

- (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)]];
}

还有!它很有魅力

您的目标是iOS7还是更早的版本?如果它是iOS7,而您更改为iOS6.1并获得预期的行为,那么它很可能就是bug


另一种方法是按照同事的建议检查自动布局约束,当然还要查看与之相关的contentFrame属性。

您的意思是,当您试图按住滚动视图的顶部时,滚动视图没有响应吗?是的,我有。不滚动,但我可以按里面的UIButton项。我注意到,如果我降低“通知”选项卡,那么滚动条也会正确移动,也会在顶部。我注意到您在模拟器中测试了这一点,物理设备是否会模拟这种行为?iphone 5和iOS 7也会发生同样的情况
- (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)]];
}