容器视图和滚动视图呈现偏移的表示

Posted

技术标签:

【中文标题】容器视图和滚动视图呈现偏移的表示【英文标题】:A container view and scroll view present an representation which is offset 【发布时间】:2014-10-17 09:47:03 【问题描述】:

我有一个包含所有 UI 元素的 UIScrollView 应用程序。 Container 中的元素之一,它具有嵌入式 UIViewController 和 UIScrollView,其中包含 UIImage 和一些绘制在其上的 UILabel。

然而,我在容器的 UIScrollView 中的呈现存在问题,因为 UIImage 应该填充整个可滚动内容,但顶部有一个栏。这个偏移量很烦人,但也会影响我对分数的计算。 (图像应该填满整个圆形边框。

我在包含 UIViewController 的 ViewDidLoad 中设置了容器视图的大小(使用约束)(结果,盒子,正如预期的那样):

[self floorPlanContainerWidthConstraint].constant = [self view].frame.size.width - self.marginWidthConstraint.constant * 2;
if([delegate isiPad])
    [self floorPlanContainerHeightConstraint].constant = 300;

[_floorPlanContainer layoutIfNeeded];

然后在容器的 UIViewController 中,在 ViewWillDisplay 上,我更新 UIImageView 尺寸,该尺寸包含在距离为“0”的滚动视图的边缘:

[super viewWillAppear:animated];

[self imageContainerHeightConstraint].constant = [self parentView].frame.size.height;
[self imageContainerWidthConstraint].constant = [self parentView].frame.size.width;

[_imageView layoutIfNeeded];
[_scrollView layoutIfNeeded];

NSLog(@"Parent frame: %f, %f, location %f, %f", [self parentView].frame.size.width, [self parentView].frame.size.height, [self parentView].frame.origin.x, [self parentView].frame.origin.y);
NSLog(@"Image frame: %f, %f, location %f, %f", _imageView.frame.size.width, _imageView.frame.size.height, _imageView.frame.origin.x, _imageView.frame.origin.y);
NSLog(@"Scroll frame: %f, %f, location %f, %f", _scrollView.frame.size.width, _scrollView.frame.size.height, _scrollView.frame.origin.x, _scrollView.frame.origin.y);
NSLog(@"Content frame: %f, %f, location %f, %f", _scrollView.contentSize.width, _scrollView.contentSize.height, _scrollView.contentOffset.x, _scrollView.contentOffset.y);
NSLog(@"Scroll frame zoom %f", [_scrollView zoomScale]);

控制台输出如预期(我认为):

Parent frame: 351.000000, 200.000000, location 12.000000, 41.000000
Image frame: 351.000000, 200.000000, location 0.000000, 0.000000
Scroll frame: 351.000000, 200.000000, location 0.000000, 0.000000
Content frame: 351.000000, 200.000000, location 0.000000, 0.000000
Scroll frame zoom 1.000000

这表明内容框架与滚动视图和图像的大小相同,但是内容稍微大一点(如所见的条形图)而值不支持这一点怎么办?我可以垂直滚动图像,而它应该完全适合(水平适合)。

如果我将容器视图重新定位在布局的下方,它会变得更好,所以有些问题。我现在花了几个小时试图找出问题所在,但找不到它,所以任何建议都非常感谢!

【问题讨论】:

【参考方案1】:

尝试设置self.edgesForExtendedLayout = UIRectEdgeNone

【讨论】:

这似乎是正确的方向。但是,如果我把它放在容器视图中,它什么也不做,只在父视图控制器中。这意味着内容最终位于导航栏下方,但我可以手动偏移。 @LuukD.Jansen 检查包含滚动视图contentInset,可能它的top 插入设置为非零值。

以上是关于容器视图和滚动视图呈现偏移的表示的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中为表格视图和滚动视图设置偏移量,以便两者一起滚动

为啥 contentView 在滚动视图中有 y 偏移

刷新控件和搜索栏导致表格视图/滚动视图出现奇怪的偏移,如何解决?

在 Flutter 中保持滚动视图偏移的同时添加列表视图项

如何获取滚动视图内容偏移量?

我设置滚动视图偏移以显示被键盘隐藏的文本字段。如果用户在显示键盘时滚动,则滚动视图会向下捕捉