UIScrollView contentOffset在另一个视图推送后更改
我在Interface Builder中有一个UIViewController
,我在UIView
添加了一个UIScrollView
。 它的contentOffset
属性等于0.0,但是当我将UIScrollView
滚动到最底层并推送另一个视图时, contentOffset
发生变化。
NSLog
给了我以下值:
//View just loaded 2013-09-09 16:19:27.455 my_app[24588:907] Scroll View content offset is 0.000000 //We came back from another view 2013-09-09 16:19:30.957 my_app[24588:907] Scroll View content offset is 108.000000
这种行为的原因是什么? 我刚刚在IB中添加了一个UIScrollView
,并且根本没有在代码中做任何事情。
scrollView的contentHeight
大于self.view.height。 scrollView的frame
保持不变。
看到我对类似问题的回答。
您需要在viewWillAppear:
和viewWillDisappear:
适当地设置scrollview的contentOffset
viewWillDisappear:
.
另外,看到这个:
- 回弹到UIViewController之后 ,对UIScrollView的原点问题的 回答会有所改变 。
- 这个相关问题, UIScrollview Autolayout Issue 。
对于iOS 7/8 self.automaticallyAdjustsScrollViewInsets = NO;
解决了这个问题。
我有一个类似的问题,在解除一个viewController后,我的tableView中的contentOffset被更改为(0,-64)。
我的解决方案有点奇怪,我尝试了所有其他答案,但没有成功,唯一解决我的问题的是切换.xib控件树中的tableView位置
它是父视图中的第一个控件,如下所示:
我在ImageView之后移动了tableView并且它工作正常:
似乎将表视图放在第一个位置导致了麻烦,并将表视图移动到另一个位置解决了问题。
PD我没有使用autoLayout和故事板
希望这可以帮助别人!
当您离开屏幕所在的滚动视图并返回时,它将在顶部或左侧或两者上添加屏幕大小的一半。 一个空白区域,你不想要的东西。 在我的情况下,分页变得一团糟,并且无法正常工作,直到我以编程方式或通过触摸将滚动放在CGPointZero中作为用户。 如果你调用NSLog( @"%f", scrollview.contentSize.height );
在viewDidLayoutSubviews
您将看到大小已更改。
它发生在偏移值不为零的轴上。 因此,要解决它,您应该在它出现之前将其设置为零CGPointZero
。
@Steph Sharp
答案解决了我的问题,除非我打开一个presentViewController
作为弹出窗口( presentViewController
)。 我试图通过在viewDidLayoutSubviews
上添加bug量来补偿该值,但它会破坏分页。
简短的回答,我最终得到:
- (void) viewDidLayoutSubviews { [super viewDidLayoutSubviews]; scrollView.contentOffset = previousPoint; } - (void) viewWillAppear:(BOOL)animated { scrollView.contentOffset = CGPointZero; } - (void) viewWillDisappear:(BOOL)animated { previousPoint = scrollView.contentOffset; scrollView.contentOffset = CGPointZero; }
现在它在我离开该部分时工作或者如果我打开上面的弹出窗口。
我在UITableView上使用https://github.com/michaeltyson/TPKeyboardAvoiding 。
我的解决方案是从UITableView中删除类TPKeyboardAvoidingTableView 。 它导致TableViewController上的滚动问题与静态和动态单元格。
检查滚动CGSizeZero
的contentSize
属性是否为CGSizeZero
。 我遇到了类似的问题,因为没有设置contentSize
。