如何使用自动布局在UIScrollview上设置约束?


176

我花了两天的时间来尝试各种混合和纯自动布局方法的解决方案,以实现在自动布局之前的简单滚动视图设置,现在已经正式宣布了-我一定太愚蠢了。我主要是在Storyboard中进行设置(嗯,就是这样)。

因此,这是我寻求帮助的请求。

视图树:

UIView
-UIView
-UIView
..-UIScrollview
...-UIButton
...-UIButton
...-UIButton

这些按钮应该水平滚动(从左到右,反之亦然)。有人可以让我知道如何设置的约束来实现这个使用纯自动布局???

-

我尝试过混合方法,如下所示:

UIView
- UIView
- UIView
..-UIScrollview
...-UIView (contentview)
....-UIButton
....-UIButton
....-UIButton

......对于与设置固定宽度和高度的限制contentview以及translatesAutoresizingMaskIntoConstraints按照苹果公司的技术说明设定。使用约束设置按钮和滚动视图。这会使scrollview滚动(是),但是可惜,它滚动得太远了!据我所知,滚动宽度以某种方式比我在contentview中设置的宽度翻了一番。

无论contentview有无,我都尝试了纯自动布局方法。除了以外,所有的观点都是。这些按钮具有固定的宽度/高度约束,并固定到滚动视图的所有四个边缘。没有滚动。translatesAutoresizingMaskIntoConstraints=NOself.view

所以我很困惑为什么我无法使其正常工作。非常感谢您的帮助,如果您需要其他信息,请询问!

带有解决方案 -buttonZ约束的更新屏幕截图

在此处输入图片说明

编辑@ Jamie Forrest 因此,解决方案原来是对最后一个按钮的错误尾随约束。我设置的值为负值-6441,而不是6441。棘手的是,在情节提要中设置值时,“固定”工具栏中有两个选项:

在此处输入图片说明

当前画布值是负的(导致没有滚动),下面的选项是正的(激活滚动)。这意味着我并不傻,但我猜至少是半盲。尽管,以我的辩护,XCode不会为“不正确”设置显示错误,是否有点令人不安?

再次编辑 现在,这很有趣...将尾随值从-6441(无滚动)更改为启用了6441的滚动。但是我的老朋友“ contentsize太大”又回来了,导致内容大小是应该的两倍!获得正确内容滚动的解决方案是将尾随约束设置为零!当在Storyboard中工作时,这并不明显,但查看@Infinity James的代码,它应该是这样。


您在哪里计算/设置滚动视图的内容大小?提到您第一次尝试使用contentView时,您说它滚动太远。
蒂姆(Tim)

2
据我所知,你不能设置contentSize一个中UIScrollView只使用自动布局。正是它contentSize定义了您可以滚动的数量。因此,您最终必须在某个地方手动设置。对于其余部分,您可以使用布局约束来设置彼此相对的视图框架。
Guillaume13年

@Jeff,内容大小是固定的,永远不会改变。我通过为contentiview手动输入正确的高度和宽度来设置情节提要中的内容大小,然后在情节提要中将高度和宽度与约束一起固定。
user1459524

在运行时打印出contentSize,看看它是否与您输入的值匹配。contentSize确定发生多少滚动,因此第一次尝试的问题与contentSize有关。
蒂姆(Tim)

@Guillaume,所以“纯自动布局”方法毕竟不是那么纯吗?但是,如何手动设置contentSize?如上所述,我将内容视图的高度/宽度设置为固定值(在情节提要中)。但是它滚动得太远(2倍)。
user1459524

Answers:


68

当您将约束粘贴到此处时,很难看到约束的确切值和设置,因此从您看错的屏幕截图中我不确定。

为了解释您的设置有什么问题,我创建了一个基本的示例项目,该项目的视图层次结构和约束设置与您所描述的非常相似。水平滚动按示例项目中的预期进行,该示例项目使用Apple在技术说明中描述的“纯自动布局”方法。

我本来在使用自动布局时也遇到了很多麻烦UIScrollView。使其正常工作的关键是确保滚动视图中的所有项目加在一起具有约束条件,这些约束条件最终会链接到滚动视图的所有侧面,并有助于AutoLayout系统能够确定滚动条的contentSize。滚动视图,该视图将大于其框架。看起来您正在尝试在代码中执行此操作,但也许您那里有一些多余的约束,这些约束使contentSize太小。

还要注意的是,就像其他人提到的那样,使用AutoLayout和UIScrollview,您不再显式设置contentSize。AutoLayout系统会根据您的约束条件来计算contentSize。

我还发现此电子书章节对帮助我理解所有这些工作原理非常有帮助。希望所有这些都对您有所帮助。


2
谢谢您的示例项目!它可以正常工作,并且在浏览过程中,我一开始对我的项目没有发现任何不同!我将视图复制到我的项目中,怀疑是约束以外的其他设置,但是它继续起作用。这使我注意到,项目中最后一个按钮的尾随约束为负值-在它前面,而您的值为正值!将-更改为正数可启用滚动!当我调出Pin工具栏时,有两个选择:Use Current Canvas value,它是负数; Scroll View(使用当前值),它是正数...?!
user1459524

是的。负值实际上会使滚动视图的contentSize变小,以匹配后沿应按钮结束之前结束的事实。很高兴该示例项目对您有所帮助!
杰米·福雷斯特

它做了很多。查看我最新的答案。尾随值实际上应该为0(零)。
user1459524

6
遗憾的是,我们必须共享屏幕截图而不是代码。那仅仅是因为苹果鼓励开发人员使用生成器而不是提供更好的api。
弗拉基米尔·斯拉维克

4
完全不直观。开发人员必须浪费大量时间来弄清楚XCode的创建者的想法。
乔什(Josh)

49

哈哈,欢迎来到愚蠢的俱乐部。我是创始人之一。:D

对于垂直滚动:使它正常工作(iOS 8,Xcode 6和纯自动布局)的唯一方法是在滚动视图中添加以下约束(所有约束均与超级视图相关):

  • 等宽
  • 等高
  • 中心Y对齐
  • 中心X对齐

我的结构:

  UIView
   - ScrollView
    - Subview
    - Subview
    - Subview
    - Subview
    - ...

这是最终结果:

演示版

这是设置:

建立 全屏

这是项目

希望这可以使某人免于凌晨5点入睡。:D


非常感谢您的帮助!您如何获得类型为“ subview”的子视图?我正在Xcode 6.2中查看您的项目,它把那些小的矩形称为“ Subview”,唯一的限制是它的高度为63px。
Andrew K

1
问候!该“子视图”实际上是一个UIView。那只是一个名字...您可以在其中键入任何内容。出此图像:cl.ly/image/291f1K2N0V3p在约束主题上,子视图不仅仅是高度约束。在此处查看整个约束列表以获取这些视图:cl.ly/image/3l061i123j2i
backslash-f

1
我仍然无法滚动工作-我注意到您的子视图视图在您的项目中“显示为灰色”。经过研究后,看起来这是因为您使用的是“大小类”。这如何影响滚动?有没有办法在不使用此功能的情况下使滚动工作?
Andrew K

另外,您如何使超级视图的长度比默认长度长得多?我正在尝试添加将显示在“折叠下方”(或屏幕外)的按钮,但是很明显,如果我不能将它们拖放到超级视图上,则无法将它们添加到超级视图中,因为它不够大。
Andrew K

1
经过一整天的搜索并尝试制作这种愚蠢的布局,我找到了这个答案,并且在第一次尝试时就可以使用。 )
Bobby Stenly,2015年

32

简单的独立实例

从对问题的高票数和对答案的低票数来看,人们在这里找不到可理解且快速的解决方案。让我尝试添加一个。该项目是一个完整的示例,完全在Interface Builder中完成。您应该可以在10分钟或更短的时间内完成它。然后,您可以将学习到的概念应用于自己的项目。

在此处输入图片说明

最初的问题询问滚动按钮。在这里,我只使用UIViews,但它们可以代表您喜欢的任何视图。我还选择了水平滚动,因为此格式的故事板截图更加紧凑。但是,垂直滚动的原理相同。

关键概念

  • UIScrollView应该只使用一个子视图。这是一个“ UIView”,用作内容视图,可容纳您希望滚动的所有内容。
  • 使内容视图和滚动视图的父级具有相等的高度以进行水平滚动。(垂直滚动的宽度相等)
  • 确保所有可滚动内容的宽度均已设置并且固定在所有侧面。

开始一个新项目

它可以只是一个单视图应用程序。

故事板

在此示例中,我们将进行水平滚动视图。选择View Controller,然后在Size Inspector中选择Freeform。确定宽度1,000和高度300。这只是为我们在情节提要板上腾出空间来添加将滚动的内容。

在此处输入图片说明

添加滚动视图

添加aUIScrollView并将所有四个边固定到视图控制器的根视图。

在此处输入图片说明

添加内容视图

将一个UIView子视图添加到滚动视图。这是关键。不要尝试向滚动视图添加很多子视图。只需添加一个即可UIView。这将是您要滚动的其他视图的内容视图。将内容视图固定到所有四个侧面的滚动视图。

在此处输入图片说明

等高

现在,在“文档大纲”中,Command单击内容视图和滚动视图的父视图,以同时选择它们。然后将高度设置为相等(Control从“内容视图”拖动到“滚动视图”)。这也是关键。因为我们正在水平滚动,所以滚动视图的内容视图将不知道它应该有多高,除非我们以这种方式设置它。

在此处输入图片说明

注意:

  • 如果要使内容垂直滚动,则将内容视图的宽度设置为等于滚动视图的父视图的宽度。

添加内容

加三个UIViews并赋予它们所有约束。我为所有内容使用了8点利润。

在此处输入图片说明

限制条件:

  • 绿色视图:钉住顶部,左侧和底部边缘。使宽度为400。
  • 红色视图:固定顶部,左侧和底部边缘。使宽度为300。
  • 紫色视图:钉住所有四个边缘。使宽度等于剩余空间(在这种情况下为268)。

设置宽度约束也是关键,以便滚动视图知道其内容视图的宽度。

已完成

就这样。您现在可以运行您的项目。它的行为应类似于此答案顶部的滚动图像。

对于垂直滚动,只需在此示例中交换所有宽度和高度方向(已测试并可以工作)。

进一步研究


9

通过应用UIScrollView内部的约束隐式设置contentSize。

例如,如果您在UIView中有一个UIScrollView,它将看起来像这样(我确定您知道):

    UIView *containerView               = [[UIView alloc] init];
    UIScrollView *scrollView            = [[UIScrollView alloc] init];
    [containerView addSubview:scrollView];
    containerView.translatesAutoresizingMaskIntoConstraints = NO;
    scrollView.translatesAutoresizingMaskIntoConstraints    = NO;
    NSDictionary *viewsDictionary       = NSDictionaryOfVariableBindings(containerView, scrollView);

    [containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|"
                                                                          options:kNilOptions
                                                                          metrics:nil
                                                                            views:viewsDictionary]];
    [containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|"
                                                                          options:kNilOptions
                                                                          metrics:nil

这将设置scrollView以填充containerView的大小(因此containerView必须具有一定的大小)。

然后,可以通过将UIScrollView的contentSize隐式设置为足够大以容纳如下按钮来调整它:

    UIButton *buttonA                   = [[UIButton alloc] init];
    UIButton *buttonB                   = [[UIButton alloc] init];
    UIButton *buttonC                   = [[UIButton alloc] init];
    [scrollView addSubview:buttonA];
    [scrollView addSubview:buttonB];
    [scrollView addSubview:buttonC];
    buttonA.translatesAutoresizingMaskIntoConstraints       = NO;
    buttonB.translatesAutoresizingMaskIntoConstraints       = NO;
    buttonC.translatesAutoresizingMaskIntoConstraints       = NO;

    viewsDictionary                     = NSDictionaryOfVariableBindings(scrollView, buttonA, buttonB, buttonC);

    [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[buttonA]-|"
                                                                       options:kNilOptions
                                                                       metrics:nil
                                                                         views:viewsDictionary]];
    [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[buttonA]-[buttonB]-[buttonC]-|"
                                                                       options:NSLayoutFormatAlignAllBaseline
                                                                       metrics:nil
                                                                         views:viewsDictionary]];

因此,我设置了scrollView和按钮之间的约束,而不是containerView和按钮之间的约束?我认为这是我在您的代码和我现在通过情节提要之间所做的唯一区别。
user1459524

二读后,我才意识到您正在设置CONTAINERview而不是CONTENTview。根据您的代码,我完全在情节提要中重新创建了所有内容,并且没有滚动。我将使用一些屏幕截图来编辑我的问题。
user1459524

1
因此,事实证明我尝试在情节提要中重新创建代码并非100%正确。最后一个按钮的尾随值应恰好为零,即镜像为H:|-[buttonA]-[buttonB]-[buttonC]-| 在情节提要中工作时,这不是很明显(或者至少对我来说不是),但是现在看来,这似乎是微不足道的。我喜欢自动排版,但是那些小事情变得
容易

@ user1459524提到的对我来说是个问题。我的底部视图是一个按钮,IB的底部约束是-32。我将其设置为0,并在IB中将其更新为底部空间为:superview。它会起作用,而且只要您站在积极方面,它似乎就会起作用。看来这可能是IB的错误。希望对别人有帮助。我还删除了所有视图并重新布线,这在尝试布局所发现的视图时会有所帮助,通常不会花很长时间。
迈克尔

8

关于将AutoLayout与UIScrollView一起使用存在很多问题,我们忽略的关键点在于UIScrollView的内部视图对内容视图(而不是UIScrollView本身)进行约束。请参阅技术说明TN2154,您可以找到:

UIScrollView类通过更改其边界的原点来滚动其内容。为了使此功能与“自动布局”一起使用,滚动视图中的上,左,下和右边缘现在表示其内容视图的边缘。

下图将描述: 在此处输入图片说明

您可以发现尾随空间为500点,如果对UIScrollView进行了约束,则该视图将丢失,并应更新其框架。但是,没有警告也没有错误。因为所有约束都违反了内容视图。

UIScrollView将根据内部视图的约束来计算内容视图的大小。(例如,内容大小:宽度= 100(前导空格)+ 200(视图的宽度)+ 500(尾部空格),高度= 131(顶部空格)+ 200(高度)+ 269(底部空格)

如何在UIScrollView中为视图添加约束:

  1. 对内容视图中的视图位置进行成像。
  2. 在内容视图的边缘添加顶部,右侧,底部,左侧间距,此外,还应添加这些视图的宽度和高度。

一切都完成了。

使用scrollview处理AutoLayout的一种简单方法是在滚动视图中添加一个包含所有子视图的容器视图。

结论:用UIScrollView理解AutoLayout的关键点是内部视图对内容视图产生约束,而不是UIScrollView本身。

附加示例代码


5

以下解决方案适用于具有autolayout且没有contentSize的scrollView

  1. 将n拖放一个scrollView到viewController并应用任何约束来覆盖所需的空间。
  2. UIView拖放到scrollView内,使其覆盖scrollView的整个空间,并将约束应用于顶部,左侧,右侧,底部空间
  3. 根据滚动需要设置内部视图的高度(如果需要水平滚动,则为宽度)。如果需要,这部分也可以通过代码完成。
  4. 严重。在点(3)上将高度设置为某个较大的值后,请返回点(2),并确保将上,左,右,下值设置为零,因为在您强制执行时Xcode可能已经为您更改了它们更改了(3)中的高度。

这样就完成了。现在,您可以在此视图上添加任意数量的控件,并应用彼此相关的约束(没有该视图似乎无法正常工作)。如果您不想使用此视图,则必须对与scrollView相关的每个控件(彼此不相关)应用约束。


压倒性的技巧..............

严重。为了清晰起见,我们假设UIScrollView的宽度1000,高度为100。(实际上,这些值通常是动态的,具体取决于设备的宽度等。但是现在仅说1000宽和100高。)假设您正在水平滚动。因此,将UIView放在UIScrollView内。(即“内容视图”。)将内容视图的所有四个约束设置为上,下,前,后,到滚动视图。即使看起来是错误的,也将它们全部设置为零。将内容UIView的高度设置为100,然后就不用管它了。现在:您想水平滚动,因此将内容视图的宽度设置为1225。

请注意,内容视图的宽度现在比父滚动视图的宽度大225。没关系:实际上,您必须这样做。注意

...不要将尾随宽度设置为负225 ...

您会认为您必须像平时一样“匹配”宽度。但是,如果您这样做,它将根本无法工作。

您必须将前导数字和尾随数字设置为 ZERO,绝不能为负(即使宽度为“更大”)

有趣的是,您实际上可以将前导/后继数字设置为任何 正值(尝试说“ 50”),这样可以给您一定的反弹幅度。(通常看起来很棒:尝试一下。)任一端的任何负值都将“无声地打破”。

请注意,令人发指的是,经常使用Xcode(从7.3.1开始),

将“有帮助”地将这些值设置为负数!

因为它会尝试自动为您计算它们。如果是这样,它将无声地中断。在第一个实例中将所有四个值设置为零。并将内容视图的宽度设置为比示例中的“ 1000”宽得多。


编辑: 对于我的大部分需求,我最终使用UITableView而不是UIScrollView。正如tableView在我看来更加灵活和动态。


这实际上是最好的答案。谢谢!
Fattie

4

我认为您在遇到问题contentSize。查看此博客文章,了解如何contentSize使用“纯”自动版式方法处理。其要点是您的约束隐式定义了内容大小。使用AutoLayout时,您永远不要显式设置它。我在博客文章的末尾附加了示例项目,以演示其工作原理


3

技术说明中有一段您可能已经看过。您可以使用固定到滚动视图边缘的约束来隐式设置滚动视图的内容大小。

这是一个简单的例子。使用一个视图创建一个故事板,该视图具有一个滚动视图。设置滚动视图约束以使其适合您放入的视图的大小。

在该滚动视图内添加一个视图。使用约束明确设置该视图的大小(并确保该大小大于滚动视图)。

现在,向该内部视图添加另外四个约束,以将内部视图的四个边缘锁定到其父滚动视图。这四个约束将导致内容大小扩展以适应内部视图。

如果要添加到多个视图(例如水平放置),则可以将第一个子视图的左侧锁定在滚动视图的左侧,将各个子视图水平锁定,然后将其锁定在右侧最后一个子视图的一侧到滚动视图的右侧。这些约束将迫使滚动视图的内容大小扩展以适应所有子视图及其约束。


3

如果您的问题是“如何将一堆UITextFields放置在垂直滚动的UIScrollView中,以使它们在具有焦点时移开键盘,”最好的答案是:

别。

请改用带有静态单元格的UITableViewController。

您可以免费获得这种滚动方式的行为,并且如果您的视图控制器显示在UINavigationController内,则所有内容插图都可以正常工作。


3

您应该像这样
ViewControllerView包含ScrollViewScrollView包含ContainerViewContainerView包含2来组织布局Labels
在此处输入图片说明

然后按照3个步骤进行ScrollView滚动

  1. ScrollView图钉(顶部/右侧/底部/左侧)设置为ViewControllerView
    • ContainerView图钉(顶部/右侧/底部/左侧)设置为ScrollView
    • 设置Horizontally in Container设置Vertically in Container
    • Label1固定(/右/左)到ContainerView
    • Label1固定(右/左/)到顶部ContainerView并固定到Label1

在此处输入图片说明

这里是演示项目

希望这个帮助


1

纯粹的自动布局方法效果很好,但是如果您要从非自动布局进行迁移,则很难进行设置。我已经做过几次了,并且有一些一般性提示:

  • 从小处开始:即使这意味着要重新创建情节提要视图,也请从几个元素开始,然后慢慢构建视图,并确保在添加一些元素后测试滚动是否有效。
  • 关闭所有内容的translatesAutoresizingMaskIntoConstraints:这始终是我约束冲突的原因。
  • 正确设置UIScrollView约束:确保滚动视图在所有侧面均已连接到父视图,否则根本不会扩展。

1

经过一段时间的处理后,我终于找到了解决方案。我正在使用通用类大小的故事板(600x600)。我创建了一个UIView(contentView),它的大小是scrollView的大小,并创建了对scrollView的顶部,底部,前导和尾随约束。然后,我手动将contentView的大小裁剪为600x600。情节提要停止了尝试调整所有内容的大小,我可以工作,但在实际设备或模拟器上的视图看起来很糟糕。我制作了2个这种剪裁尺寸的约束插座。

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *contentViewWidthConstraint; 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *contentViewHeightConstraint;

然后在viewDidLoad中

CGSize viewSize = self.view.frame.size;
self.contentViewWidthConstraint.constant = viewSize.width;
self.contentViewHeightConstraint.constant = viewSize.height;

效果很好。


1

我花了几天的时间来寻找一种解决方案,该解决方案涉及如何使用AutoLayout查看嵌入式Scrollview,以将scrollview置于可见屏幕的中央,该视图可在所有设备/屏幕尺寸以及屏幕旋转范围内使用。

我花了几天的时间尝试仅使用Autolayout进行操作,但距离很近,但距离不够远。因此,最后我必须在viewDidLoad中为每个屏幕添加3行代码。

请参阅下面的解决方案:

  1. 创建滚动视图并用所需的任何对象填充
  2. 开启自动版面配置
  3. 然后将ScrollView垂直和水平居中 中心ScrollView
  4. 选择视图,然后“添加缺少的约束” -然后执行此操作
  5. 结果是产生了很多约束。为视图创建了2个新视图:“将Horiz空间滚动视图转换为视图”和“将空间空间滚动视图转换为视图”,反之亦然。
  6. 删除“ Horiz空间滚动视图到视图”,这样您就在视图上留下了3个约束。用于在视图中输入滚动视图的2和用于在滚动视图与视图之间设置垂直空间的一个
  7. 现在,通过单击并按住Ctrl并将其拖动到头文件中并创建一个NSLayoutConstraint IBOutlet,将Vert约束链接到您的代码(我称我为矿约束VertVtoSV)
  8. 现在转到.m文件,并将这些代码行添加到viewDidLoad中(使用填充量来获得正确的顶点居中)

    if (IPAD)
    

    {self.constraintVertVtoSV.constant = 150.0; }

  9. 现在,它应该可以在所有设备上运行,并且可以正确居中并仍然可以正确滚动。


1

如果像我一样,您只是使用静态内容而没有子视图内部的约束,则可以这样:

override func viewDidLayoutSubviews() {
    scrollView.contentSize = CGSizeMake(320, 800)
}

1

我今天在iOS 8.4,Xcode 6.4中遇到类似的问题

那里有一个包含滚动视图的视图,其中包含一个包含子视图的contentView(UIView)。

到处都是自动布局。将滚动视图边缘固定到具有约束的父视图边缘。内容视图边缘将通过约束固定到滚动视图边缘。

最初,内容视图将拒绝将尺寸设置为滚动视图的整个宽度。我必须在内容视图上添加其他约束,以使其宽度与父滚动视图匹配。或者我可以设置contentView.centerX == scrollView.centerX约束。除了固定边缘之外,其中任何一种都会使内容视图正确调整大小。

// Either one of these additional constraints are required to get autolayout to correctly layout the contentView. Otherwise contentView size is its minimum required size
scrollView.addConstraint(NSLayoutConstraint(item: contentView, attribute: .CenterX, relatedBy: .Equal, toItem: scrollView, attribute: .CenterX, multiplier: 1.0, constant: 0))
scrollView.addConstraint(NSLayoutConstraint(item: contentView, attribute: NSLayoutAttribute.Width, relatedBy: .Equal, toItem: scrollView, attribute: .Width, multiplier: 1.0, constant: 0.0))

使用表单的视觉约束将内容视图的边缘固定到滚动视图,

let cvConstraints = ["H:|[contentView]|", "V:|[contentView]|"]

我使用例程来遍历数组并将其添加到scrollView。


1

我遇到了类似的问题。我设置了所有约束,并且总是想知道为什么它仍会调整某些子视图的大小。我的解决方案是将clipsToBounds设置为YES。


1

SWIFT,您可以使用该工作方案。

制约因素

ScrollView:领先,落后,顶部,底部=超级

ContentView:前导,尾随,顶部,底部= ScrollView。高度固定/相对于内容。

您可以将width约束(contentView)设置为等于scrollviews超级视图,但是在构建时选择remove remove,因为您将以编程方式添加该约束。这只是为了确保IB不会发出警告。

extension UIView {

    func setupContentViewForViewWithScroll(contentView vwContent : UIView) {
        //Set constraint for scrollview content
        let constraint = NSLayoutConstraint(item: vwContent, attribute: NSLayoutAttribute.Width, relatedBy: .Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: self.bounds.size.width)
        vwContent.addConstraint(constraint)
        self.layoutSubviews()
    }

}

在视图控制器中,viewDidLayoutSubviews我只是调用此方法:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    self.view.setupContentViewForViewWithScroll(contentView: vwContent)
}

0

我知道这是一个外行的解决方案,而不是Apple在文档中建议的解决方案,但是它为我工作了两次,内容不同,可以很快设置:在情节提要视图控制器中插入UIView。在UIView中插入表格视图,动态,0个原型单元格,样式为普通或分组。在表视图中插入滚动视图,在滚动视图中插入内容。就是这样,自定义视图控制器中没有设置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.