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

时间:2017-09-03 00:10:28

标签: ios objective-c nslayoutconstraint

SecondViewControllerUIView方法中添加MKMapViewIBAction作为子视图:

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添加到屏幕顶部:

enter image description here

我尝试通过向MapViewController的viewDidLoad添加以下代码来将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];

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

enter image description here

我想要得到的是: enter image description here

我将不胜感激任何帮助!非常感谢你!

2 个答案:

答案 0 :(得分:0)

当您添加mapView.translatesAutoresizingMaskIntoConstraints = NO;时,如果没有足够的约束来定义正确的帧,则地图矩形大小等于零,这就是您将屏幕设置为黑色的原因,您需要定义{所需的所有约束{1}}

使用动态高度约束更新

尝试使用此代码

MKMapView

答案 1 :(得分:0)

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