程序子视图的垂直间距到底部约束

Program Subview's Vertical Spacing to Bottom Constraint

SecondViewController 添加一个 UIView,其中包含一个 MKMapView 作为 IBAction 方法中的子视图:

if(_tagTwo == 4){
    seg2_buttonImg = @"Maps.png";

    UIImage *btnImage1 = [UIImage imageNamed:seg2_buttonImg];
    [_left_button setImage:btnImage1 forState:UIControlStateNormal];
    [_table removeFromSuperview];
    [mapVC layoutMapView];
    [self.view addSubview:mapVC.view];
    return;
}

mapVC 是在 ViewDidLoad 中用 mapVC = [[CollectionMapViewController alloc] init];

创建的

编辑:添加约束的新代码,取自@Reinier Melian:

@implementation CollectionMapViewController

@synthesize mapView;

- (void)viewDidLoad
{
    if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
        //[segmentedControl setBackgroundColor:[UIColor whiteColor]];
        //[segmentedControl setBackgroundColor:[UIColor leafletBrown]];
        [segmentedControl setBackgroundColor:[UIColor leafletLightBrown]];
        segmentedControl.layer.cornerRadius = 5;
    }
    self.mapView.translatesAutoresizingMaskIntoConstraints = NO;
    NSArray * verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[mapView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(self.mapView)];
    NSArray * horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[mapView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(self.mapView)];


    //Add constraints to the Parent
    [self.view addConstraints:verticalConstraints];
    [self.view addConstraints:horizontalConstraints];
}

CollectionMapViewController.h:

@interface SecondViewController : UIViewController <NSFetchedResultsControllerDelegate, CollectionMapViewControllerDelegate>{

    CollectionMapViewController* mapVC;
}

@property (nonatomic, retain) CollectionMapViewController* mapVC;

问题是它将 MKMapView 添加到屏幕顶部:

我试图通过将以下代码添加到 MapViewControllerviewDidLoad

来将 MKMapView 限制在屏幕底部
   mapView.translatesAutoresizingMaskIntoConstraints = NO;

    NSLayoutConstraint *bottom =[NSLayoutConstraint
                                 constraintWithItem:mapView
                                 attribute:NSLayoutAttributeBottom
                                 relatedBy:NSLayoutRelationEqual
                                 toItem:self.view
                                 attribute:NSLayoutAttributeBottom
                                 multiplier:1.0f
                                 constant:0.f];


    //Add constraints to the Parent
    [self.view addConstraint:bottom];

但这只会让地图变黑(或者更有可能将其完全移出屏幕?)。

我想得到的是:

如有任何帮助,我将不胜感激!非常感谢!

当您添加 mapView.translatesAutoresizingMaskIntoConstraints = NO; 时,如果没有足够的约束来定义正确的框架,您的地图矩形大小等于零,这就是为什么您的屏幕变黑的原因,您需要定义所需的所有约束你的 MKMapView

使用动态高度限制更新

尝试使用此代码

self.mapView.translatesAutoresizingMaskIntoConstraints = NO;
CGFloat mapHeigthValue = self.view.frame.size.height/3; //setting the mapView heigth = 1/3 of view height this is an example
NSArray * verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"V:[mapView(%f)]|",mapHeigthValue] options:0 metrics:nil views:@{@"mapView":self.mapView}];
NSArray * horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[mapView]|" options:0 metrics:nil views:@{@"mapView":self.mapView}];


//Add constraints to the Parent
[self.view addConstraints:verticalConstraints];
[self.view addConstraints:horizontalConstraints];

在 viewDidLoad 中:

mapView.translatesAutoresizingMaskIntoConstraints = NO;



    /*Set width and height of mapview */
    NSLayoutConstraint *widthConst = [NSLayoutConstraint constraintWithItem:mapView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:400];
    NSLayoutConstraint *heightConst = [NSLayoutConstraint constraintWithItem:mapView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:300];
    [self.view addConstraint:widthConst];
    [self.view addConstraint:heightConst];


    /*creater X and Y constraints for mapview */
    NSLayoutConstraint *centreHorizontallyConstraint = [NSLayoutConstraint
                                                        constraintWithItem:mapView
                                                        attribute:NSLayoutAttributeCenterX
                                                        relatedBy:NSLayoutRelationEqual
                                                        toItem:self.view
                                                        attribute:NSLayoutAttributeCenterX
                                                        multiplier:1.0
                                                        constant:0];

    [self.view addConstraint:centreHorizontallyConstraint];

    NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint
                                            constraintWithItem:mapView
                                            attribute:NSLayoutAttributeBottom
                                            relatedBy:NSLayoutRelationEqual
                                            toItem:self.view
                                            attribute:NSLayoutAttributeBottom
                                            multiplier:1.0
                                            constant:140];

    [self.view addConstraint:bottomConstraint];