[英]UIScrollView not scroll in top screen of iPhone with iOS7
我在使用iOS 7的iPhone中使用UIScrollView时出现问题
我以编程方式创建了水平UIScrollView,我添加了一些彩色按钮,最后我将滚动定位在屏幕顶部。
滚动是一个自定义滚动,所以我可以处理
- (BOOL)touchesShouldCancelInContentView:(UIView *)view {
return YES;
}
和
scroll.canCancelContentTouches = YES;
scroll.delaysContentTouches = YES;
即使按下按钮,也允许滚动移动
一切都很完美,除了屏幕顶部,滚动不动。 但我可以按下按钮。 如果我放下滚动条(大约30px)我可以在它的上部滚动它(内容大小和框架是正确的)
我使用info.plist设置“查看基于控制器的状态栏外观= NO”删除了iOS 7的状态栏
似乎在状态栏区域我无法拖动滚动。
有什么建议么?
编辑:有趣的是,如果在滚动之前,您下拉了通知选项卡,那么滚动甚至在上部也可以工作。 当通知选项卡向上移动时,问题返回。 好像第一次触摸是由选项卡管理而不是将其传递给滚动
是的,UIScrollView在纯自动布局环境中发生了一些奇怪的事情。 第二十次重新阅读iOS SDK 6.0发行说明我发现:
请注意,通过在视图和滚动视图子树外部的视图(例如滚动视图的超级视图)之间创建约束,可以使滚动视图的子视图显示为浮动(不滚动)在其他滚动内容上。
解
将子视图连接到外部视图。 换句话说,对于嵌入了scrollview的视图。
由于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)]];
}
而且! 它充当魅力!
您的目标是iOS7还是早期版本? 如果它是iOS7并且您更改为iOS6.1并获得预期的行为,则很可能是bug。
另一种方法是检查同事已经建议的自动布局约束,当然还要观察与之相关的contentFrame属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.