How can I use Autolayout to set constraints on my UIScrollview?

后端 未结 18 1660
别那么骄傲
别那么骄傲 2020-11-28 00:43

I have spent two days trying out the various solutions for Mixed and Pure Autolayout approaches to achieve what was a trivial scrollview setup prior to autolayout, and it\'s

18条回答
  •  暖寄归人
    2020-11-28 01:43

    The contentSize is implicitly set by applying the constraints inside of the UIScrollView.

    For example, is you have a UIScrollView inside of a UIView it will look like this (as I am sure you are aware):

        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
    

    That will set the scrollView to fill the size of the containerView (so the containerView will have to be of a certain size).

    You can then adjust the contentSize of the UIScrollView by implicitly setting it to be large enough to hold the buttons like this:

        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]];
    

提交回复
热议问题