Как использовать UIBezierPath в представлении автоматической разметки?

Насколько я знаю, представления, отображаемые ограничениями, не имеют рамки, так что мне делать, если я хочу нарисовать некоторые линии в этих представлениях? Методы как moveToPoint действительно нужно CGRect,

Вот мой чек: NSLog(@"%f,%f,%f,%f",self.contentView.frame.origin.x,self.contentView.frame.origin.y,self.contentView.frame.size.width,self.contentView.frame.size.height); И результат 0.000000,0.000000,0.000000,0.000000

Для более подробной информации, вот мой код:

-(void)loadView
{
    self.view = [[UIView alloc]init];


    self.titleView = [[UIView alloc]init];
    self.placesHolder = [[UIView alloc]init];
    self.contentView = [[UIView alloc]init];

    self.titleView.translatesAutoresizingMaskIntoConstraints = NO;
    self.placesHolder.translatesAutoresizingMaskIntoConstraints = NO;
    self.contentView.translatesAutoresizingMaskIntoConstraints = NO;

    self.titleView.backgroundColor = [UIColor grayColor];
    self.placesHolder.backgroundColor = [UIColor blueColor];
    self.contentView.backgroundColor = [UIColor redColor];

    [self.view addSubview:self.titleView];
    [self.view addSubview:self.placesHolder];
    [self.view addSubview:self.contentView];

    NSDictionary *timeLineViewMap = @{@"titleView":self.titleView,
                                  @"placesHolder":self.placesHolder,
                                  @"contentView":self.contentView
                                  };


    NSArray *titleHorizon = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[titleView]|" options:0 metrics:nil views:timeLineViewMap];
    NSArray *placesHolderHorizon = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[placesHolder(==58)]-0-[contentView]|" options:0 metrics:nil views:timeLineViewMap];
    NSArray *titleVertical = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[titleView(==58)]-0-[placesHolder]|" options:0 metrics:nil views:timeLineViewMap];
    NSArray *contentViewConstrain = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[titleView]-0-[contentView]|" options:0 metrics:nil views:timeLineViewMap];


    [self.view addConstraints:titleHorizon];
    [self.view addConstraints:placesHolderHorizon];
    [self.view addConstraints:titleVertical];
    [self.view addConstraints:contentViewConstrain];
}

2 ответа

Конечно UIView есть кадр даже с AutoLayout. Вы просто не устанавливаете значения вручную, AutoLayout сделает это за вас. Методы как setFrame: все еще называются. Просто внедрить drawRect: как ты всегда делал.

Ну, проблема вроде решена, кажется, что кадр вида не получает размер, пока он не viewDidAppear переехать. Затем я проверил некоторые другие вопросы, такие как iOS AutoLayout - получить ширину кадра, которые указывают, что addConstraints следует положить в viewDidLayoutSubviews метод, которого нет в жизненном цикле viewController.

Другие вопросы по тегам