UIScrollView中的UIView不调整宽度

时间:2015-06-26 13:06:26

标签: ios objective-c uiview ios8 uiscrollview

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

我认为我的Autolayout存在问题并调整了contentWidth的大小,所以这就是我到目前为止所做的:

  1. 我添加了一个带有以下约束的UIScrollView:
    • 领先空间到Superview = 0
    • superview = 0
    • 的顶部空间
    • 高度=超级视图的宽度
    • 宽度= superview的宽度
  2. 然后我添加了一个UIView(称为GraphView)作为Child,具有以下约束:
    • 零空间到scrollview的所有4个边界
    • 中心X和中心Y到scrollview
  3. 在我的GraphViewController中,我将contenSize设置为:

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

    但它不会滚动! 如果我在故事板中设置了固定宽度,则滚动视图会比我有数据滚动得更远。

    我做错了什么?

2 个答案:

答案 0 :(得分:1)

使用自动布局时,您不应该设置contentSize的{​​{1}}。如果设置正确,则应根据约束计算。

您缺少的是在scrollView内的视图上设置宽度和高度约束。 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]

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

答案 1 :(得分:0)

在主视图中将ScrollView放在一边,并提供TopBottomLeadingTrailingCenter XCenter Y。< / p>

在您GraphView内取scrollview后,并设置约束GraphView

设置GraphView

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

当您设置HeightGraphView然后自动设置ScrollView contentSize。

请参阅我的演示,它的工作是垂直滚动,适用于水平滚动。

Demo Vertical Scrolling