【问题标题】:iOS Scroll View doesn't scroll with auto layout with views added in programmaticallyiOS Scroll View 不使用自动布局滚动,并以编程方式添加视图
【发布时间】:2016-03-11 04:14:47
【问题描述】:

我有一个ViewController,里面有一个scrollView 和一个内容View。 一些labelsContent View 中的东西也是如此。

现在之后,当view加载时,我必须将其他地方的数据传递给这个view controller,然后通过代码加载一些其他视图。

scrollviewContent height 和高度确实得到了更新,我确实将视图的加载和添加放在了ViewWillAppear。但即使内容大小大于scrollview 的高度,我也无法滚动它。

Scroll View 身高:667Scroll View 内容高度:1632 ContentView 身高:1632

【问题讨论】:

  • 您是否为视图添加了关于您以编程方式添加的滚动视图的约束
  • 不,主要是我真的不知道怎么做,会再试一次。这是否意味着我也必须向视图中的标签添加约束?或者只是相对于滚动视图将约束添加到视图中?但是我将视图作为子视图添加到内容视图中。我是否将约束添加到 ContentView?
  • 请按照这个 6 分钟的视频 youtube.com/watch?v=UnQsFlMGDsI 并相应地添加您的约束。
  • 滚动视图不会滚动,如果它的高度和内容高度相同。为了让滚动视图滚动内容,它的高度应该小于内容高度。
  • 我已经添加了故事板所需的约束,包括所有视图,相应的标签。它是我通过代码在视图中添加的部分需要约束。

标签: ios uiscrollview ios-autolayout


【解决方案1】:

您的滚动视图没有滚动,因为您为内容视图提供了固定大小。

别着急,做个高度限制的出口就行了。

查看下图,如何创建约束出口,

注意:- 你需要创建出高度约束。

来自您的图片。

现在设置在你的 viewDidLayoutSubviews

-(void)viewDidLayoutSubviews
{
    NSInteger screenheight=[ [ UIScreen mainScreen ] bounds ].size.height;

    if (screenheight > 504 + 64)
    {
        _contentviewHeight.constant = screenheight-64;
    }

}

最后但并非最不重要的一点,不要忘记从 Adjust Scrollview 昆虫中删除 Tick,

【讨论】:

  • 这个Adjust ScrollView虫在哪里?到目前为止,我跟随你的步伐改变了约束。而且它不起作用。
  • 可能是因为当前的视图控制器故事板不是主故事板,所以找不到。但我认为我将通过代码向我通过代码添加的视图添加约束。无论如何,感谢您的努力。
  • 您没有找到什么?以及为什么您同时通过代码和情节提要添加约束?
  • 因为该应用在 Iphone 4 和 5 上看起来不错,但在 6 上真的很难看。所以我必须使用自动布局。至于为什么要通过代码添加视图,因为我要添加的单个视图非常大并且有很多细节。我试着把所有东西都塞进一个视图,它挂了我的 Iphone,所以通过代码添加。
  • 没问题。这取决于你。实际上,当您设置宽高比时,您的视图或任何其他控件将根据设备自动调整大小。最后一个只是一个建议。
【解决方案2】:

在自动布局的情况下,您添加到滚动视图的任何视图。您必须添加约束(基本上是顶部约束),以便 Scrollview 自动计算 contentsize。

参考下文以编程方式添加约束。

iOS create NSLayoutConstraint programmatically for table view cell content

编辑:-

就像你说的 SView 在故事板中。因此,在 SView 上从情节提要本身创建约束。

E、R 和 H 视图将以编程方式添加约束

链接只是一个例子

您将使用 [self addConstraint] 而不是 [self.ContentView addConstraint]

另外也参考这个:-

iOS Autolayout Vertically equal space to fill parent view

【讨论】:

  • 所以我通过代码添加了 3 个视图,所以总共 4 个视图。比方说,SView(故事板中的那个)、EView、RView 和 HView。是不是应该是这样的? [self.ContentView addConstraint:[NSLayoutConstraint constraintWithItem:EView 属性:NSLayoutAttributeBottomrelatedBy:NSLayoutRelationEqual toItem:SView 属性:NSLayoutAttributeBottom 乘数:1.0 常量:0]];并且继续向下添加?喜欢 SView-0-EView-0-RView-0-HView-0-| ?
  • 我已经添加了约束来查看,滚动视图可以滚动但很少,几乎没有显示EView。我是否为每个视图的高度添加约束?到目前为止,我只通过代码添加了 3 个约束。 S View.bot = E View.Top; E View.bot = R View.Top; R View.bot = H View.top;还需要添加哪些其他约束?
  • 我已经在所有视图中添加了高度、宽度和前导约束,但滚动视图仍然无法一直向下滚动。有什么不对?我将所有 3 个视图的高度设置为 600 的固定常数,并且它们的宽度与 contentView 相同,它们的 Left 也等于 contentView Left。关系是错误的还是别的什么?它仍然滚动相同的少量。
【解决方案3】:

好的,最后。

在尝试和重试之后无济于事。 我刚刚放弃了将自动布局放在具有滚动视图本身的 ViewController 上。

所以我取消勾选自动布局,然后瞧。

显然,具有滚动视图的视图控制器不需要自动布局。只是我通过代码放入的视图需要在他们的故事板中自动布局。在我正确调整视图中的所有约束并且从不给它们宽高比约束而只是固定它们的宽度和高度之后。完成。

所以我希望任何和我一样沮丧的人看到这一点并听取我的建议。不要费心将自动布局放在滚动视图或其内容视图上。只需完全取消它。对要放入的视图进行自动布局。您只需正确指定视图的宽度和高度,它就会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多