Как использовать 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.