Jor*_*ans 5 objective-c uiscrollview uiview ios autolayout
这是问题所在:
我在UIScrollView中放了一堆视图.这些子视图的大小和位置由约束定义.这非常有效,滚动效果也很好.到现在为止还挺好.
但是,当我第一次在屏幕上显示viewcontroller时,我希望我的scrollview一直滚动到底部,这就是麻烦开始的地方.为了知道底部的位置,我需要知道子视图中最低元素的位置和大小.也应该很容易(因为我在某处提到了UIView):得到UIView的框架并且瞧.
我想在滚动视图出现在屏幕上之前将其滚动到底部(基本上,在viewWillAppear中),但是仅在viewWillAppear之后和viewDidAppear:之前调用约束.
在viewWillAppear中获取UIView框架给了我一个零大小的CGRect.在viewDidAppear中做同样的事情给了我正确的CGRect.但是viewDidAppear对我来说太迟了,因为滚动视图已经在屏幕上,所以你看到内容向上移动.
有没有人有这个很好的解决方案?我尝试将代码放在viewDidLayoutSubviews中,但这也不起作用.
问题viewWillAppear
是在布局发生之前调用它.您必须在布局后调整滚动视图的内容偏移量 - viewDidLayoutSubviews
方法.在这是我的解决方案:
@property (nonatomic, assign) BOOL shouldScrollToBottom;
- (void)viewDidLoad
{
[super viewDidLoad];
_shouldScrollToBottom = YES;
}
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
// Scroll table view to the last row
if (_shouldScrollToBottom)
{
_shouldScrollToBottom = NO;
[_scrollView setContentOffset:CGPointMake(0, CGFLOAT_MAX)];
}
}
Run Code Online (Sandbox Code Playgroud)
我最终想出的解决方案是:
scrollRectToVisible
在滚动视图的底部执行一个操作scrollViewWillBeginDragging
以便当用户开始移动滚动视图时自动滚动停止 归档时间: |
|
查看次数: |
1652 次 |
最近记录: |