我有一个通用的应用程序,代码是一样的。我有一个UIScrollView,其中scrollToTop在iPad上工作但在iPhone上没有。我很沮丧。
我知道有一个类似的帖子here,但事实并非如此。我以前在iPad和iPhone上都有滚动功能。知道该找什么吗?
代码的结构是这样的。我有一个名为A的mainVC。然后我有一个名为B的VC。还有另一个名为C的VC,它有一个UIScrollView。我添加了C作为B的子视图控制器。然后B作为A的孩子VC。现在C上的滚动视图没有scrollToTop工作。
委托scrollViewShouldScrollToTop也只在iPad中调用,而不是在iPhone中调用。
答案 0 :(得分:1)
请查看my answer您提到过的问题。我刚刚添加它。
<强> 修改 强>
我没有我制作的原始代码,但它应该是这样的:
-(void)cleanUp:(UIScrollView*)view{
if([view isKindOfClass:[UIScrollView class]]){
view.scrollsToTop = NO;
}else{
for(UIScrollView* subview in view.subviews){
if([subview isKindOfClass:[UIView class]]){
[self cleanUp:subview];
}
}
}
}
你可以这样称呼它:
[self cleanUp:self.view];
你可能还需要更复杂的例程(有时你可能在scrollView中有一个tableView或类似的东西):
-(void)cleanUp:(UIScrollView*)view{
if([view isKindOfClass:[UIScrollView class]]){
view.scrollsToTop = NO;
}
for(UIScrollView* subview in view.subviews){
if([subview isKindOfClass:[UIView class]]){
[self cleanUp:subview];
}
}
}
答案 1 :(得分:1)
我刚刚接受了@Ariel的解决方案并做了一些我希望与您分享的改进:
+ (void)globalDisableScrollToTop:(UIView *)_view;
{
// Check whether we got a scroll view
if ([_view isKindOfClass:[UIScrollView class]])
{
// Disable scroll to top
((UIScrollView *)_view).scrollsToTop = NO;
}
// Iterate all subviews
for (UIView *view in _view.subviews)
{
// Recursive call of this method
[self globalDisableScrollToTop:view];
}
}
或者没有评论:
+ (void)globalDisableScrollToTop:(UIView *)_view;
{
if ([_view isKindOfClass:[UIScrollView class]])
((UIScrollView *)_view).scrollsToTop = NO;
for (UIView *view in _view.subviews)
[self globalDisableScrollToTop:view];
}
它现在修复了所有子视图,可以实现为静态方法(根滚动视图类)。
答案 2 :(得分:0)
如果可能,请在此处粘贴添加子视图代码。看起来问题是滚动视图存在的视图正在隐藏在其他视图后面。尝试更改添加子视图的顺序。或者您也可以尝试使用UploadSubviewtoFront属性将滚动视图设置在顶部。
如果有帮助,请告诉我。