Ios UIScrollView不使用AutoLayout滚动

Ios UIScrollView不使用AutoLayout滚动,ios,objective-c,iphone,uiscrollview,autolayout,Ios,Objective C,Iphone,Uiscrollview,Autolayout,使用Autolayout时,我无法使UIScrollView垂直滚动,我尝试了许多建议。我读过苹果的,但即使这样,我的纯自动布局方法似乎也不起作用 下面是我的简单代码,其中我在容器视图中添加了两个UIView块1和2。正如许多在线参考文献所建议的那样,容器视图本身是UIScrollView的唯一子视图。我将块1和块2的高度分别设置为800点,但滚动视图不会滚动 - (void)viewDidLoad { [super viewDidLoad]; //

使用Autolayout时,我无法使UIScrollView垂直滚动,我尝试了许多建议。我读过苹果的,但即使这样,我的纯自动布局方法似乎也不起作用

下面是我的简单代码,其中我在容器视图中添加了两个UIView块1和2。正如许多在线参考文献所建议的那样,容器视图本身是UIScrollView的唯一子视图。我将块1和块2的高度分别设置为800点,但滚动视图不会滚动

    - (void)viewDidLoad {
        [super viewDidLoad];


        // Test UIScrollView with Autolayout, scrolling should word

        UIView *mainView = self.view;

        UIScrollView* scrollView = [UIScrollView new];
        scrollView.translatesAutoresizingMaskIntoConstraints = NO;
        scrollView.backgroundColor = [UIColor redColor];
        [self.view addSubview:scrollView];

        UIView* contentView = [UIView new];
        contentView.translatesAutoresizingMaskIntoConstraints = NO;
        contentView.backgroundColor = [UIColor greenColor];
        [scrollView addSubview:contentView];

        UIView* block1 = [[UIView alloc] init];
        block1.translatesAutoresizingMaskIntoConstraints = NO;
        [block1 setBackgroundColor:[UIColor blackColor]];
        [contentView addSubview:block1];

        UIView* block2 = [[UIView alloc] init];
        block2.translatesAutoresizingMaskIntoConstraints = NO;
        [block2 setBackgroundColor:[UIColor blackColor]];
        [contentView addSubview:block2];


        NSDictionary* viewDict = NSDictionaryOfVariableBindings(mainView,scrollView, contentView, block1, block2);

        [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics:0 views:viewDict]];
        [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" options:0 metrics:0 views:viewDict]];


        [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[contentView(==mainView)]|" options:0 metrics:0 views:viewDict]];
        [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView(==mainView)]|" options:0 metrics:0 views:viewDict]];


        [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[block1(==300)]" options:0 metrics:0 views:viewDict]];
        [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[block1(==800)]" options:0 metrics:0 views:viewDict]];

        [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[block2(==300)]" options:0 metrics:0 views:viewDict]];
        [contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-810-[block2(==800)]" options:0 metrics:0 views:viewDict]];

}

从代码来看,内容视图的大小似乎与UIView的大小相同

e、 g:如果设备屏幕高度为568,则内容视图大小将为568,并且将块2设置为y位置=180

您的代码:

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView(==mainView)]|" options:0 metrics:0 views:viewDict]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView(2000)]|” options:0 metrics:0 views:viewDict]];
更改:

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView(==mainView)]|" options:0 metrics:0 views:viewDict]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView(2000)]|” options:0 metrics:0 views:viewDict]];

希望它能解决您的问题,如果有任何进一步的查询,请让我知道。

如果您只想让滚动视图与自动布局一起工作,您可以试试这个。
在代码中执行以下更改

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView]|" options:0 metrics:0 views:viewDict]];

[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-810-[block2(==800)]|" options:0 metrics:0 views:viewDict]];

希望这有帮助

首先,我将块y轴上的约束定义为
V:|[block1(=800)]-10-[block2(=block1)]
。至于滚动,我相信你需要在某处定义某个东西的框架。滚动视图的帧/边界为(0,0,0,0),即使在滚动视图中添加内容视图,并且在内容视图中添加块,这些边界仍然可以是(0,0,0,0),并且仍然满足您列出的约束。。。它只是将块添加到大小为(0,0)的UIView顶部。我会记录您的内容视图和滚动视图的边界,以确认我认为UIScrollView是使用自动布局的最差控件。如技术说明中所述,关键难点在于要求滚动视图中包含的内容的大小不依赖于滚动视图。换句话说,它不像一个普通的容器视图,在这个视图中,容器中的东西可以随着容器(以及设备大小)而膨胀或收缩。他们给出的示例使用具有固有大小的图像视图。我不认为这对实际应用有很大帮助。