583

开发人员,我在 Interface Builder (Xcode 5 / iOS 7) 中遇到自动布局问题。这是非常基本和重要的,所以我认为每个人都应该知道它是如何正常工作的。如果这是 Xcode 中的一个错误,那就是一个严重的错误!

所以,每当我有这样的视图层次结构时,我都会遇到麻烦:

>UIViewController
>> UIView
>>>UIScrollView
>>>>UILabel (or any other comparable UIKit Element)

UIScrollView 具有可靠的约束,例如,每边 50 像素(没问题)。然后我向 UILabel 添加一个顶部空间约束(没问题)(我什至可以固定标签的高度/宽度,没有任何改变,但由于标签的固有大小应该是不必要的)

当我向 UILabel 添加尾随约束时,麻烦就开始了:

例如,尾随空格到:Superview 等于:25

现在出现两个警告 - 我不明白为什么:

A) Scrollable Content Size Ambiguity (Scroll View has ambiguous scrollable content height/width)

B)错位的视图(标签预期:x= -67 实际:x= 207

我在一个全新的项目中做了这个最小的例子,你可以下载它,我附上了一个截图。如您所见,Interface Builder 期望 Label 位于 UIScrollView 的边界(橙色虚线矩形)之外。使用解决问题工具更新标签的框架会将其移动到那里。

请注意:如果您将 UIScrollView 替换为 UIView,则行为符合预期(Label 的框架是正确的并且符合约束)。所以似乎 UIScrollView 有问题,或者我错过了一些重要的事情。

当我运行应用程序而不按照 IB 的建议更新标签的框架时,它的位置很好,正是它应该在的位置,并且 UIScrollView 是可滚动的。如果我确实更新了框架,则标签不在视线范围内,并且 UIScrollView 不会滚动。

帮助我欧比旺克诺比!为什么是模棱两可的布局?为什么会有错位的看法?

您可以在此处下载示例项目并尝试是否可以弄清楚发生了什么: https ://github.com/Wirsing84/AutoLayoutProblem

Interface Builder 中的问题说明

4

34 回答 34

1173

于是我就这样整理了一下:

  1. 在里面UIScrollView 添加一个UIView(我们可以称之为contentView);

  2. 在 thiscontentView中,设置 top、bottom、left 和 right margin 为 0(当然从scrollViewwhich 是superView);还设置水平和垂直对齐中心

更新:

如今,Apple 意识到了我们多年前解​​决的问题(lol_face),并提供了Content Layout GuideFrame Layout Guide作为UIScrollView. 因此,您需要执行以下步骤:

  1. 同上;

  2. 为此contentView将顶部、底部、左侧和右侧边距设置为 0,将它们固定到滚动视图的内容布局指南

  3. 现在将contentView' 高度设置为Frame Layout Guide的高度。对宽度做同样的事情;

  4. 最后,将等高约束的优先级设置为250(如果需要视图垂直滚动,则宽度水平滚动)。

完成

现在您可以在其中添加所有视图contentView,并且contentSizescrollView根据contentView.

不要忘记将约束从您的最后一个对象的底部设置contentViewcontentView' 的边距。

于 2014-12-01T11:14:54.527 回答
203

Xcode 11+

最简单的使用方法autolayout

  1. 添加UIScrollView并将其固定0,0,0,0到超级视图(或您想要的大小)
  2. 添加UIViewScrollView,将其固定到所有 4 个边0,0,0,0并居中。horizontallyvertically
  3. 在尺寸检查器中,更改bottomalign center Y优先级为 250。(用于水平滚动更改trailingalign center X
  4. 将您需要的所有视图添加到此视图中。不要忘记在最低视图上设置底部约束。
  5. 选择UIScrollView,选择尺寸检查器并取消选择Content Layout Guides
于 2017-05-04T14:04:09.963 回答
123

Xcode 11+,斯威夫特 5

如果您想知道为什么所有答案都不再起作用,请确保您已将内容视图(您放在滚动视图中的那个)固定到滚动视图的内容布局指南而不是框架布局指南。

内容视图边缘(前导、尾随、顶部、底部)不应像图像上的前导一样固定 - 框架布局指南

不像这样

但像这样 - 内容布局指南。

从下拉列表中选择内容布局指南

在此处输入图像描述

然后大多数答案都会为您服务。

现在最简单的方法是这样的:

  1. 将滚动视图放在根视图中
  2. 将滚动视图的所有边固定到超级视图
  3. 取另一个 UIView(将其称为内容视图)并将其放在滚动视图中
  4. 将内容视图的所有侧面固定到滚动视图的内容布局指南
  5. 将内容视图的宽度固定为等于滚动视图的框架布局指南
  6. 以您想要的任何方式修复内容视图高度(我在下面的示例中只使用了恒定高度约束)

总体而言,您在最简单实现中的结构将如下所示

在此处输入图像描述

于 2019-10-10T14:45:29.130 回答
103

这个错误花了我一段时间才找到,最初我尝试固定 ScrollView 的大小,但错误消息清楚地显示“内容大小”。我确保从 ScrollView 顶部固定的所有内容也固定在底部。这样,ScrollView 可以通过查找所有对象和约束的高度来计算其内容高度。这解决了不明确的内容高度,宽度非常相似......最初我将大多数东西 X 集中在 ScrollView 中,但我还必须将对象固定到 ScrollView 的一侧。我不喜欢这样,因为 iPhone6 可能有更宽的屏幕,但它会消除“模糊内容宽度”错误。

于 2013-10-01T20:51:28.123 回答
64

这是我的自我回答问题UIScrollView + Centered View + Ambigous Scrollable Content Size + many iPhone sizes的答案。

但它也完全涵盖了您的情况!

因此,这是最简单情况的初始状态:

  1. scrollView 对所有边缘的约束为 0
  2. 按钮居中水平和垂直,具有固定的宽度和高度约束
  3. 而且,当然 -烦人的警告 Has ambiguous scrollable content widthHas ambiguous scrollable content height.

1

我们要做的就是:

  • 添加 2 个额外的约束,例如“0”表示我们视图的尾随和/或底部空间(请看下面的屏幕截图示例)。

重要提示:您必须添加尾随和/或底部约束。不是“领先和顶级” - 它不起作用!

2

您可以在我的示例项目中查看它,它演示了如何解决此问题。

附言

根据逻辑 - 此操作应导致“冲突约束”。但不是!

我不知道它为什么起作用以及 Xcode 如何检测哪个约束的优先级更高(因为我没有明确为这些约束设置优先级)。如果有人在下面的评论中解释为什么它有效,我将不胜感激。

于 2014-10-09T08:28:28.083 回答
52

您需要创建一个UIView作为子视图,UIScrollView如下所述:

  • UIViewController
  • UIView'主视图'
    • UIScrollView
      • UIView'容器视图'
        • [您的内容]

第二步是做UIScrollView约束。我使用其 superView 的顶部、底部、前导和尾随约束来完成此操作。

接下来我为容器添加了约束,UIScrollView这就是问题的开始。当您放置相同的约束(顶部、底部、前导和尾随)时,情节提要会发出警告消息:

“具有不明确的可滚动内容宽度”和“具有不明确的可滚动内容高度”

继续使用上面相同的约束,只需将约束添加到Equal Height主视图Equal Width相关的容器视图中,而不是添加到您的. 换句话说,Container View 的约束与的 superview 相关联。UIScrollViewUIScrollView

之后,您的 Storyboard 中将不会出现警告,您可以继续为子视图添加约束。

于 2014-10-29T21:20:40.700 回答
49

我遇到过同样的问题。取消选中此复选框。由于您在代码中设置内容大小。 在此处输入图像描述

于 2019-12-06T10:35:56.120 回答
24

我终于想通了,我希望这更容易理解。

您通常可以通过将基本 UIView 作为“内容视图”添加到滚动视图来绕过该警告,正如他们所提到的,并使其与滚动视图的大小相同,并在此内容视图上设置这 6 个参数。

在此处输入图像描述

如您所见,您总共需要 6 个参数!哪个..在正常情况下,您要复制 2 个约束,但这是避免此情节提要错误的方法。

于 2015-10-13T03:52:22.023 回答
16

我知道我可能迟到了,但下一个解决方案无需额外代码即可解决此类问题,只需使用情节提要:

对于您的内容视图,您需要为滚动视图设置前导/尾随/顶部/底部空间的约束,这不会更改内容视图框架,如下所示:在此处输入图像描述

当然,您需要为内容视图创建额外的约束,以便滚动视图可以知道内容大小。例如设置固定高度和中心 x。

希望这可以帮助。

于 2015-01-16T13:37:25.263 回答
9

对我来说,添加 acontentView并没有像建议的那样工作。此外,由于添加了视图,它会产生开销(尽管我不认为这是一个大问题)。对我最有效的方法就是关闭我的scrollView. 一切都很好,所以我认为在像我这样的简单情况下没关系。但请记住,如果您的其他约束scrollView中断,Interface-Builder 将不会再警告您。

在此处输入图像描述

于 2017-03-03T03:44:14.497 回答
6

查看这个非常快速且重点明确的教程,了解如何使用自动布局使滚动视图正常工作并完全可滚动。现在,唯一仍然让我感到困惑的是为什么滚动视图内容的大小总是比必要的大..

http://samwize.com/2014/03/14/how-to-use-uiscrollview-with-autolayout/

于 2014-08-13T02:05:48.957 回答
5

Swift 4+ 方法:

1) 设置UIScrollView的上下左右边距为0

2)在 UIScrollView 添加一个 UIView 并将顶部、底部、前导、尾随边距设置为 0(等于 UIScrollView 边距)。

3)最重要的部分是设置宽度和高度,其中高度约束应该具有低优先级

private func setupConstraints() {

    // Constraints for scrollView
    scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

    // Constraints for containerView
    containerView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
    containerView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
    containerView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
    containerView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
    containerView.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true

    let heightConstraint = containerView.heightAnchor.constraint(equalTo: scrollView.heightAnchor)
    heightConstraint.priority = UILayoutPriority(rawValue: 250)
    heightConstraint.isActive = true
}
于 2018-12-19T22:17:47.727 回答
3

使用 contentView( UView) 作为里面的容器UIScrollView,坚持 superview() 的边 ( top, bottom, trailing, leading)UIScrollView并且contentView应该有equalwidthequalheight到 superview。这些都是约束。并调用方法:

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    self.scrollView.contentSize = self.contentView.frame.size;
}

为我解决了问题。

于 2014-12-11T08:46:51.593 回答
3

见下文:scrollview 中的内容视图垂直和水平集中。您遇到歧义错误,请始终确保从内容视图添加到滚动视图中的两个是 1).button 空间到 container.2)尾随空间到在屏幕截图中突出显示的约束,

滚动中的这些约束意味着您可以在内容视图高度或宽度之后滚动多少。

在此处输入图像描述

它可能会帮助你。

于 2016-06-09T06:54:49.247 回答
3

我通过为选定视图使用“解决自动布局问题”>“添加缺少的约束”为我的视图解决了此类问题 在此处输入图像描述

以下两个约束解决了我的问题:

trailing = Stack View.trailing - 10
bottom = Stack View.bottom + 76

其中: trailing,bottom 是 UIScrollView 的尾随、底部

于 2018-03-30T03:19:06.037 回答
3

在我的情况下,我收到了 iPad 中不正确的内容大小和内容大小歧义的问题,但在 iPhone 的情况下工作。我在情节提要中进行了以下更改以解决该问题。

  1. 在 UIView 中添加滚动视图,并将前导、顶部、尾随和底部约束添加到 0,0,0,0。
  2. 根据例如要求设置滚动视图的高度。100。
  3. 将 UIView 添加到滚动视图并将前导、顶部、尾随和底部约束添加到 0,0,0,0 并对齐中心(X)和中心(Y)约束。
  4. 在滚动视图的大小检查器中取消选择“内容布局指南”。
于 2020-04-29T11:56:52.220 回答
2

@Matteo Gobbi 的回答很完美,但在我的情况下,滚动视图无法滚动,我删除“对齐中心 Y ”并添加“高度 >=1 ”,滚动视图将变为可滚动

于 2015-05-29T11:34:41.033 回答
2

与 uiscrollview 不滚动作斗争的人只需使用最后一个视图的底部布局(位于内容视图内部)设置内容视图的底部约束。不要忘记删除中心 Y 约束。

其余所有约束与上面定义的相同。Scrollview 只关心从它的内容视图中获取最大高度,我们将它设置为最后一个视图的底部约束,这意味着滚动视图会自动改变它的内容偏移量。

在我的情况下,最后一个视图是 UILable,没有行属性 = 0(根据其内容自动调整其高度),因此它动态增加 uilable 的高度,最终我们的可滚动区域增加,因为 uilable 的底部布局与我们的内容视图的底部对齐,这迫使滚动视图增加它的内容偏移量。

于 2017-03-26T14:46:43.173 回答
2

我只使用 Xcode 中的 Storyboard 在 youTube Scroll StackViews上制作了一个视频

我认为这里会出现两种情况。

scrollView 内的视图 -

  1. 没有任何内在内容大小(例如UIView
  2. 确实有自己的内在内容大小(例如UIStackView

对于这两种情况下的垂直可滚动视图,您需要添加以下约束:

  1. 来自顶部、左侧、底部和右侧的 4 个约束。

  2. 与滚动视图等宽(停止水平滚动)

对于具有自己的内在内容高度的视图,您不需要任何其他约束。

在此处输入图像描述


对于没有任何内在内容高度的视图,您需要添加高度约束。仅当高度约束大于 scrollView 的高度时,视图才会滚动。

在此处输入图像描述

于 2017-10-20T19:38:17.503 回答
2
import UIKit

class ViewController: UIViewController {

    //
    let scrollView: UIScrollView = {
        
        let sv = UIScrollView()
        sv.translatesAutoresizingMaskIntoConstraints = false
        return sv
    }()
    
    let lipsumLbl: UILabel = { // you can use here any of your subview
        
        let lbl = UILabel()
        lbl.translatesAutoresizingMaskIntoConstraints = false
        lbl.text = """
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce eleifend nisi sit amet mi aliquet, ut efficitur risus pellentesque. Phasellus nulla justo, scelerisque ut libero id, aliquet ullamcorper lectus. Integer id iaculis nibh. Duis feugiat mi vitae magna tincidunt, vitae consequat dui tempor. Donec blandit urna nec urna volutpat, sit amet sagittis massa fringilla. Pellentesque luctus erat nec dui luctus, sed maximus urna fermentum. Nullam purus nibh, cursus vel ex nec, pulvinar lobortis leo. Proin ac libero rhoncus, bibendum lorem sed, congue sapien. Donec commodo, est non mollis malesuada, nisi massa tempus ipsum, a varius quam lorem vitae nunc.
        
        Cras scelerisque nisi dolor, in gravida ex ornare a. Interdum et malesuada fames ac ante ipsum primis in faucibus. Maecenas vitae nisl id erat sollicitudin accumsan sit amet viverra sapien. Etiam scelerisque vulputate ante. Donec magna nibh, pharetra sed pretium ac, feugiat sit amet mi. Vestibulum in ipsum vitae dui vehicula pulvinar eget ut lectus. Fusce sagittis a elit ac elementum. Fusce iaculis nunc odio, at fermentum dolor varius et. Suspendisse consectetur congue massa non gravida. Sed id elit vitae nulla aliquam euismod. Pellentesque accumsan risus dolor, eu cursus nibh semper id.
        
        Vestibulum vel tortor tellus. Suspendisse potenti. Pellentesque id sapien eu augue placerat dictum. Fusce tempus ligula at diam lacinia congue in ut metus. Maecenas volutpat tellus in tellus maximus imperdiet. Integer dignissim condimentum lorem, id luctus nisi maximus at. Nulla pretium, est sit amet mollis eleifend, tellus nulla viverra dolor, ac feugiat massa risus a lectus. Pellentesque ut pulvinar urna, blandit gravida ipsum. Nullam volutpat arcu nec fringilla auctor. Integer egestas enim commodo, faucibus neque ac, rutrum magna. Vivamus tincidunt rutrum auctor. Cras at rutrum felis. Fusce elementum lorem ut pharetra venenatis.
        """
        lbl.textColor = .darkGray
        lbl.font = UIFont.systemFont(ofSize: 16)
        lbl.numberOfLines = 0
        return lbl
    }()
    
    //======================================================================//
    //
    // MARK:- viewDidLoad
    //
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupViews()
        setupAutoLayout()
    }
    
    func setupViews() {
        
        title = "ScrollView Demo"
        view.backgroundColor = .white
        view.addSubview(scrollView)
        scrollView.addSubview(lipsumLbl)
    }
    
    func setupAutoLayout() {
        
        scrollView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        scrollView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        
        lipsumLbl.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
        lipsumLbl.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        lipsumLbl.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        lipsumLbl.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
    }
}

输出:

在此处输入图像描述

于 2019-07-23T09:43:04.190 回答
2

如果 UIScrollView 仍有问题,只需关闭Content Layout Guides (在 xcode Interface Builder 中选择您的 ScrollView -> 在右侧面板中选择 Size 检查器 -> 取消选择“Content Layout Guides”)或尝试以下步骤:xcode 11 scroll view layouts -它对于新的布局风格很有用。适用于 macOS 10.15.2、Xcode 11.3.1,适用于 05.02.2020

看截图

于 2020-02-05T07:28:45.017 回答
1

垂直滚动

  1. 将约束为 0,0,0,0 的 UIScrollView 添加到 superview。
  2. 在 ScrollView 中添加一个 UIView,约束为 0,0,0,0 到 superview。
  3. 将 UIView 的相同宽度约束添加到 UIScrollView。
  4. 将高度添加到 UIView。
  5. 将带有约束的元素添加到 UIView。
  6. 对于最靠近底部的元素,确保它对 UIView 的底部有约束。
于 2019-05-05T20:33:37.753 回答
1

对于任何视图,框架及其内容的大小都是相同的,即如果您有一些大小为 200 * 800 的内容(例如图像),那么它的框架也是 200 * 800。

这不适用于滚动视图的内容。内容通常大于滚动视图的框架大小。如果内容的宽度相同,那么您只能垂直滚动。如果它的高度相同,那么您只能水平滚动。因此,它是唯一需要 6 个约束而不是 4 个的视图。对于任何其他具有超过 4 个必需约束的视图,都会导致冲突。


要设置你的滚动视图,它的内容和滚动位置,你基本上需要回答三个问题:

  1. 我的框架有多大?即在任何给定时刻滚动视图应该有多大?例如,我只想使用屏幕高度的一半,所以
scrollview.frame = (x: 0, y:0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height / 2)
  1. 我需要多少滚动空间?即内容有多大?例如,框架可以只有 500 点的宽度,但是您可以设置具有 7000 点的图像,这需要相当长的时间来水平滚动。或者让它正好是 500 点的宽度,这意味着不会发生水平滚动。

  2. 你现在滚动了多少?假设您的内容(或图像)宽度为 7000,帧大小仅为 500。要到达图像的末尾,您需要向右滚动 6500 点。第三部分确实不影响约束。你现在可以忽略它。理解它只会有助于滚动视图的工作方式。

解决方案

基本上,如果您遗漏了 2 个额外的约束(关于内容大小),那么布局引擎会因为歧义而抱怨。它不会知道内容的哪些区域被隐藏(在 scrollView 中不可见)以及内容的哪些区域不隐藏(在 scrollView 中可见)。

因此,请确保您也为内容添加了大小限制。有关更多信息,请参阅此答案

但有时我不会在我的视图中添加大小限制,它就可以工作。这是为什么?

如果您添加到滚动视图中的所有内容都被限制在滚动视图的边缘,那么随着内容的增长,滚动视图将增加空间来容纳。只是您可能在其所在的位置使用UIViews,因此scrollView仍会抱怨其intrinsicContentSize内容的歧义。但是,如果您使用了 a并且它有一个非空文本,那么它会被设置(基于字体大小和文本长度以及换行符等),因此 scrollView 不会抱怨它的歧义。0UILabelintrinsicContentSize

于 2020-09-08T07:35:31.947 回答
0

我所做的是创建一个单独的内容视图,如此处所示。

内容视图是自由形式的,可以将所有子视图添加到其中,并具有与 contentView 相关的约束。

UIScrollView 被添加到主视图控制器。

以编程方式,我将通过 IBOutlet 链接的 contentView 添加到类并设置 UIScrollView 的 contentView。

UIScrollView 与 ContentView 通过 Interface Builder

于 2015-07-08T04:05:21.657 回答
0

我遇到了同样的错误..我已经完成了以下操作

  1. 视图(超级视图)
  2. 滚动视图 0,0,600,600
  3. ScrollView 内的 UIView :0,0,600,600
  4. UIView 包含图像视图、标签

现在为 scrollView(2) 添加前导/尾随/顶部/底部,然后是 UIView(3)。

选择 View(1) 和 View(3) 设置相同的高度和重量..它解决了我的问题。

我已经完成了有帮助的视频:

https://www.youtube.com/watch?v=s-CPN3xZS1A

于 2015-07-23T12:30:39.717 回答
0

[在 XCode 7.2 和 iOS 9.2 中测试]

对我来说,抑制 Storyboard 错误和警告的原因是将滚动视图和内容视图(在我的情况下为 stackview)的固有大小设置为Placeholder。此设置可在 Storyboard 的大小检查器中找到。它说 - 设置设计时内在内容大小只会影响在 Interface Builder 中编辑时的视图。视图在运行时不会有这个内在的内容大小。

所以,我想通过设置这个我们不会出错。

注意:在故事板中,我已将滚动视图的所有边缘固定到超级视图,并将堆栈视图的所有边缘固定到滚动视图。在我的代码中,我将滚动视图和堆栈视图的translatesAutoresizingMaskIntoConstraints设置为 false。而且我没有提到内容大小。当 stackview 动态增长时,storyboard 中设置的约束确保堆栈是可滚动的。

故事板警告让我发疯,我不想为了压制警告而将事物水平或垂直居中。

于 2016-01-06T09:18:12.340 回答
0

如果有人发现您注意到右侧的滚动条滚动但内容没有移动,那么这个事实可能值得考虑:

您还可以在滚动视图的内容和滚动视图之外的对象之间使用约束来为滚动视图的内容提供固定位置,使该内容看起来漂浮在滚动视图上。

这是来自 Apple 的文档。例如,如果您不小心将顶部的 Label/Button/Img/View 固定到滚动区域之外的视图(可能是标题或滚动视图上方的某个东西?)而不是 contentView,您会冻结整个 contentView。

于 2016-09-29T23:32:16.920 回答
0

正如前面的答案中提到的,您应该在滚动视图中添加一个自定义视图:

自定义view就是图中标注的ContentView

将所有子视图添加到内容视图。在某些时候您会看到滚动内容视图有不明确的内容大小警告,您应该选择内容视图并单击“解决自动布局问题”按钮(在 IB 布局的右下角),然后选择“添加缺失约束”选项。

在此处输入图像描述

从现在开始,当您运行项目时,滚动视图将自动更新其内容大小,无需额外代码。

于 2016-11-03T09:09:59.553 回答
0

您只需要确保有一种方法可以从滚动视图的顶部到底部创建连续的约束线。[-XXX]

在我的例子中——一个水平滚动的滚动视图——我还需要为滚动视图的每个子视图添加宽度和高度约束,尽管Apple 的技术说明没有告诉你这一点。

于 2017-01-18T04:32:21.920 回答
0

在 Interface Builder 的大小检查器中将 ViewController(持有 UIScrollView 的那个)大小设置为 Freeform,一切都应该工作。

包含 UIViewcontroller 的 Interface Builder 中 Size 检查器中的自由格式设置

于 2017-02-14T23:13:02.833 回答
0

Xcode 11+,斯威夫特 5。

根据@WantToKnow 的回答,我解决了我的问题,我准备了视频代码

于 2019-12-11T06:27:19.720 回答
0

使用自动布局

在定义明确的视图中添加滚动视图,然后在滚动视图中添加堆栈视图

将滚动视图和堆栈视图中的顶部、左侧、右侧、底部、中心 X 和中心 Y 约束添加到其相关的超级视图

确保约束从堆栈视图链接到正确的超级视图(滚动视图),因为当前的默认设置是添加对齐顶部约束而不是顶部空间约束。

于 2020-05-21T21:01:06.657 回答
-2

滚动视图内的所有子视图都必须具有接触滚动视图所有边缘的约束,如文档中所述,滚动视图的高度和宽度由子视图中的度量自动计算,这意味着您需要宽度的尾随和前导约束以及高度的顶部和底部约束。

于 2015-02-16T02:38:55.913 回答
-3

我认为这是从现在开始的 10 秒工作。我在 XCode 7.3 中观察到它并在上面制作了一个视频。在这里检查:

https://www.youtube.com/watch?v=yETZKqdaPiI

您所要做的就是添加一个UIScrollView具有相同宽度和高度的子视图。然后选择 ViewController 并按Reset to suggested constraint。请查看视频以获得清晰的理解。

谢谢

于 2016-06-11T07:42:41.500 回答