Search code examples
objective-cios7ios6

What is replacement of iOS7 LayoutGuide in iOS6


I am using EMCCountryPickerController ( https://github.com/emcrisostomo/EMCCountryPickerController ) for Country Picker in app Development. It is working good in iOS7. But it crashed because of LayoutGuide which is not available in iOS6. I am not sure how to change this code to work in iOS6.

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view.
    [self validateSettings];
    [self loadCountries];

    [rootView addConstraint:[NSLayoutConstraint constraintWithItem:searchBar
                                                         attribute:NSLayoutAttributeTop
                                                         relatedBy:NSLayoutRelationEqual
                                                            toItem:self.topLayoutGuide
                                                         attribute:NSLayoutAttributeBottom
                                                        multiplier:1
                                                          constant:0]];

    [rootView addConstraint:[NSLayoutConstraint constraintWithItem:searchBar
                                                         attribute:NSLayoutAttributeCenterX
                                                         relatedBy:NSLayoutRelationEqual
                                                            toItem:rootView
                                                         attribute:NSLayoutAttributeCenterX
                                                        multiplier:1
                                                          constant:0]];

    [rootView addConstraint:[NSLayoutConstraint constraintWithItem:searchBar
                                                         attribute:NSLayoutAttributeLeading
                                                         relatedBy:NSLayoutRelationEqual
                                                            toItem:rootView
                                                         attribute:NSLayoutAttributeLeading
                                                        multiplier:1
                                                          constant:0]];

    [rootView addConstraint:[NSLayoutConstraint constraintWithItem:countryTable
                                                         attribute:NSLayoutAttributeTop
                                                         relatedBy:NSLayoutRelationEqual
                                                            toItem:searchBar
                                                         attribute:NSLayoutAttributeBottom
                                                        multiplier:1
                                                          constant:0]];

    [rootView addConstraint:[NSLayoutConstraint constraintWithItem:rootView
                                                         attribute:NSLayoutAttributeTrailing
                                                         relatedBy:NSLayoutRelationEqual
                                                            toItem:countryTable
                                                         attribute:NSLayoutAttributeTrailing
                                                        multiplier:1
                                                          constant:0]];

    [rootView addConstraint:[NSLayoutConstraint constraintWithItem:rootView
                                                         attribute:NSLayoutAttributeLeading
                                                         relatedBy:NSLayoutRelationEqual
                                                            toItem:countryTable
                                                         attribute:NSLayoutAttributeLeading
                                                        multiplier:1
                                                          constant:0]];

    [rootView addConstraint:[NSLayoutConstraint constraintWithItem:self.bottomLayoutGuide
                                                         attribute:NSLayoutAttributeTop
                                                         relatedBy:NSLayoutRelationEqual
                                                            toItem:countryTable
                                                         attribute:NSLayoutAttributeBottom
                                                        multiplier:1
                                                          constant:0]];

}

Solution

  • It works in both iOS 6.1 & 7 after replacing self.topLayoutGuide & self.bottomLayoutGuide with self.view.

    if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
        [rootView addConstraint:[NSLayoutConstraint constraintWithItem:searchBar
                                                             attribute:NSLayoutAttributeTop
                                                             relatedBy:NSLayoutRelationEqual
                                                                toItem:self.topLayoutGuide
                                                             attribute:NSLayoutAttributeBottom
                                                            multiplier:1
                                                              constant:0]];
        }else{
         [rootView addConstraint:[NSLayoutConstraint constraintWithItem:searchBar
                                                              attribute:NSLayoutAttributeTop
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:self.view
                                                              attribute:NSLayoutAttributeTop
                                                             multiplier:1
                                                               constant:0]];
        }
        [rootView addConstraint:[NSLayoutConstraint constraintWithItem:searchBar
                                                             attribute:NSLayoutAttributeCenterX
                                                             relatedBy:NSLayoutRelationEqual
                                                                toItem:rootView
                                                             attribute:NSLayoutAttributeCenterX
                                                            multiplier:1
                                                              constant:0]];
    
        [rootView addConstraint:[NSLayoutConstraint constraintWithItem:searchBar
                                                             attribute:NSLayoutAttributeLeading
                                                             relatedBy:NSLayoutRelationEqual
                                                                toItem:rootView
                                                             attribute:NSLayoutAttributeLeading
                                                            multiplier:1
                                                              constant:0]];
    
        [rootView addConstraint:[NSLayoutConstraint constraintWithItem:countryTable
                                                             attribute:NSLayoutAttributeTop
                                                             relatedBy:NSLayoutRelationEqual
                                                                toItem:searchBar
                                                             attribute:NSLayoutAttributeBottom
                                                            multiplier:1
                                                              constant:0]];
    
        [rootView addConstraint:[NSLayoutConstraint constraintWithItem:rootView
                                                             attribute:NSLayoutAttributeTrailing
                                                             relatedBy:NSLayoutRelationEqual
                                                                toItem:countryTable
                                                             attribute:NSLayoutAttributeTrailing
                                                            multiplier:1
                                                              constant:0]];
    
        [rootView addConstraint:[NSLayoutConstraint constraintWithItem:rootView
                                                             attribute:NSLayoutAttributeLeading
                                                             relatedBy:NSLayoutRelationEqual
                                                                toItem:countryTable
                                                             attribute:NSLayoutAttributeLeading
                                                            multiplier:1
                                                              constant:0]];
    
        if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
        [rootView addConstraint:[NSLayoutConstraint constraintWithItem:self.bottomLayoutGuide
                                                             attribute:NSLayoutAttributeTop
                                                             relatedBy:NSLayoutRelationEqual
                                                                toItem:countryTable
                                                             attribute:NSLayoutAttributeBottom
                                                            multiplier:1
                                                              constant:0]];
        }else{
        [rootView addConstraint:[NSLayoutConstraint constraintWithItem:self.view
                                                             attribute:NSLayoutAttributeBottom
                                                             relatedBy:NSLayoutRelationEqual
                                                                toItem:countryTable
                                                             attribute:NSLayoutAttributeBottom
                                                            multiplier:1
                                                              constant:0]];