UIScrollview Autolayout问题
我有一个自动布局(也许)和我的滚动查看问题!
我的问题
- 我向下滚动
然后我推到另一个视图
3.然后我回去,滚动视图看起来像这样,我不能滚动到最高点(我在滚动视图的弹跳看到它)
有谁能够帮助我?
包含视图控制器中的以下代码片段也似乎解决了问题,而不依赖于显式大小:
- (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; self.mainScrollView.contentOffset = CGPointZero; }
它将内容偏移重置为原点,但其他答案似乎也如此。
如果你仍然在寻找答案,那么在两天之后,我发现了这个答案。 我只会粘贴你的代码,但最重要的是当你加载你的scrollView ..
-(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,这对于解决这个问题是至关重要的。 祝你好运!)
我正在使用亚当的解决scheme,但开始有问题,当我解雇animation:是。 在我的代码中,内容偏移在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; }
一点都不高雅,但我认为我会分享的作品。
我使用UITabBarController和不同的视图与自动布局。 视图比设备的屏幕更长。 从一个标签切换到另一个标签有时会导致您所描述的问题。 只有当视图在切换之前被滚动下来才会发生。 我在这里尝试了所有的build议,但这不适合我的情况。 我的解决scheme是在离开视图之前再次向上滚动。 至less在iOS 6中解决这个错误的方法是:
-(void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [scrollView setContentOffset:CGPointZero animated:NO]; }
问题原因应用AutoLayout之前,ScrollView被设置为ContentOffset。 解决scheme是:
创build私有财产
@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; }
你有尝试过吗?
self.automaticallyAdjustsScrollViewInsets = NO;
在我的情况下,这是什么解决了我的问题。
我有同样的问题。 原来,我在内容视图上设置了一个约束,将其y中心alignment到超视图的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; }
- 正确地使用Interface Builder和Autolayout在UIScrollView中调整UILabel的大小?
- 如何使用“自动布局”为纵向和横向定向configuration不同的布局?
- iOS的AutoLayout问题与ScrollView
- 方向更改后,UITableView布局中的错误
- iOS自动布局:如何dynamic均匀地分配空间项目?
- UIScrollView分页Autolayout&Storyboard
- 我怎样才能触发更新所有的自动布局约束?
- 滚动视图大小与Autolayout:框架是紧凑型/任何尺寸的类600×480,大于iphone5?
- 使用自动布局约束将子类UIView添加到Nib