UIScrollView 中的 UIView 不调整宽度

Posted

技术标签:

【中文标题】UIScrollView 中的 UIView 不调整宽度【英文标题】:UIView in UIScrollView does not adjust width 【发布时间】:2015-06-26 13:06:26 【问题描述】:

我一直在搜索 *** 和谷歌提出的任何建议,但我无法让它工作。我打算在滚动视图中绘制一个简单的 2D 图形,我的数据点之间的距离是kStepX,我希望滚动视图至少是屏幕的宽度,如果我有更多数据点,它应该滚动但不超过 100点。

我认为我的自动布局和调整 contentWidth 有问题,所以这是我目前所做的:

    我添加了具有以下约束的 UIScrollView: 领先空间到 Superview =0 超级视图的顶部空间 =0 高度 = 父视图的宽度 宽度 = 父视图的宽度 然后我添加了一个 UIView(称为 GraphView)作为具有以下约束的子项: 滚动视图的所有 4 个边界都为零空间 中心 X 和中心 Y 滚动视图

在我的 GraphViewController 中,我将 contenSize 设置为:

historyScrollView.contentSize = CGSizeMake(MAX(SCREEN_WIDTH,sizeof(data)*kStepX), kGraphHeight);

但它不滚动! 如果我在情节提要中设置了固定宽度,则滚动视图滚动得比我拥有的数据更远..

我做错了什么?

【问题讨论】:

【参考方案1】:

在使用自动布局时,您不应设置scrollViewcontentSize。如果设置正确,则应从您的约束中计算出来。

您缺少的是在 scrollView 内的视图上设置宽度和高度约束。 scrollView 根据子视图的大小确定它是 contentSize。由于UIView 没有内在大小,您需要为其添加widthheight 约束,然后在需要时使用正确的值更新它

这样的事情应该可以工作:

innerViewWidthConstraint.constant = MAX(SCREEN_WIDTH,sizeof(data)*kStepX) 
innerViewHeightConstraint.constant = kGraphHeight

// You might need to layout the views too
[historyScrollView layoutIfNeeded]

希望这会有所帮助!祝你好运:)

【讨论】:

谢谢 Catalina,我通过代码添加了约束,并在自动布局中放置了一个占位符宽度约束,现在可以使用了,谢谢!【参考方案2】:

将 ScrollView 放在主视图中,并提供 Top,Bottom,Leading,Trailing,Center XCenter Y

GraphView 放入你的scrollview 并设置GraphView 的约束。

设置GraphView的高度

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *HeightGraphView; 

当您设置HeightGraphView 时,会自动设置 ScrollView contentSize。

查看我的演示,它适用于垂直滚动,适用于水平滚动。

Demo Vertical Scrolling

【讨论】:

以上是关于UIScrollView 中的 UIView 不调整宽度的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollview 中的 UIView 中的 UITableView :点击时 UITableView 数据被清除

自定义 UIView 中的 UIScrollView 不滚动

UIScrollView中的UIView不出现

在 UIScrollview 中的 UIView 上的屏幕中的框架

在uiscrollview中的多个uiview之间传递数据

UIScrollVIew 中的 UIView 不更新视图