我的自动布局(可能)和我的滚动视图有问题!
我的问题
- 我向下滚动
2.然后我推送到另一个视图
3.然后我回去,滚动视图看起来像那样,我无法滚动到最高点。(我在滚动视图的弹跳中看到它)
有谁能够帮我?
我的自动布局(可能)和我的滚动视图有问题!
我的问题
2.然后我推送到另一个视图
3.然后我回去,滚动视图看起来像那样,我无法滚动到最高点。(我在滚动视图的弹跳中看到它)
有谁能够帮我?
包含视图控制器中的以下代码片段似乎也解决了这个问题,而不依赖于显式大小:
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
self.mainScrollView.contentOffset = CGPointZero;
}
它确实将内容偏移量重置为原点,但其他答案似乎也是如此。
如果您仍在寻找答案,我今天在头撞墙上两天后找到了答案。我只是将代码粘贴给您,但最重要的是当您加载滚动视图时..
-(void)viewWillAppear:(BOOL)animated{
[scrollView setFrame:CGRectMake(0, 0, 320, 800)];
}
-(void)viewDidAppear:(BOOL)animated
{
[scrollView setScrollEnabled:YES];
[scrollView setContentSize:CGSizeMake(320, 800)];
}
所有这些都是之前加载的-(void)viewDidLoad
请注意,在这两种情况下,高度都是 800,这对于解决此问题至关重要。祝你的项目好运;)
我正在使用亚当的解决方案,但是当我用动画解散时开始遇到问题:YES。在我的代码中,内容偏移量在 viewWillAppear 之后设置了一段时间(因为 viewWillAppear 似乎为时过早)。
- (void)viewDidDisappear:(BOOL)animated
{
self.scrollOffsetToPersist = self.scrollView.contentOffset;
self.scrollView.contentOffset = CGPointZero;
[super viewDidDisappear:animated];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[NSOperationQueue mainQueue] addOperationWithBlock:^
{
self.scrollView.contentOffset = self.scrollOffsetToPersist;
}];
}
编辑:另一种更好的方法是在 viewDidLayoutSubviews 中重新设置它:)
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
if(!CGPointEqualToPoint(CGPointZero, self.scrollOffsetToPersist))
{
self.scrollView.contentOffset = self.scrollOffsetToPersist;
self.scrollOffsetToPersist = CGPointZero;
}
}
这不是很好,但我通过在自动布局发生后在 viewDidAppear 中设置内容大小、设置 scrollOffset 并在 viewDidDisappear 中保持滚动偏移量,然后设置滚动偏移回到它在 viewDidAppear 中的持久状态。
像这样:
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:YES];
self.scrollView.contentSize = self.scrollViewInnerView.frame.size;
self.scrollView.contentOffset = [self.scrollOffsetToPersist CGPointValue];
}
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:YES];
self.scrollOffsetToPersist = [NSValue valueWithCGPoint:self.scrollView.contentOffset];
self.scrollView.contentOffset = CGPointZero;
}
一点也不优雅,但我想我会分享的作品。
问题原因 ScrollView 在应用 AutoLayout 之前设置了 ContentOffset。解决方案是:
创建私有财产
@property (assign,nonatomic) CGPoint scrollviewContentOffsetChange;
添加代码以查看方法
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.scrollView.contentOffset = CGPointZero;
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.scrollviewContentOffsetChange = self.scrollView.contentOffset;
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
self.scrollView.contentOffset = self.scrollviewContentOffsetChange;
}
我使用 UITabBarController 和具有自动布局的不同视图。视图比设备的屏幕长。从一个选项卡切换到另一个选项卡有时会导致您描述的问题。仅当视图在切换之前向下滚动时才会发生这种情况。我在这里尝试了所有建议,但这对我的情况不起作用。我的解决方案是在离开视图之前再次向上滚动。至少在 iOS 6 中解决这个错误:
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[scrollView setContentOffset:CGPointZero animated:NO];
}
你试过这个吗?
self.automaticallyAdjustsScrollViewInsets = NO;
就我而言,这就是解决我的问题的原因。
我有同样的问题。结果我在内容视图上设置了一个约束,将它的 y 中心与超级视图的 y 中心对齐。当我删除这个约束时,它工作得很好。
尝试这个
@property (nonatomic, assign) CGPoint scrollViewContentOffsetChange;
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.scrollView.contentOffset = CGPointZero;
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.scrollViewContentOffsetChange = _scrollView.contentOffset;
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
_scrollView.contentOffset = self.scrollViewContentOffsetChange;
}