2014-05-09 2 views
0

매우 기본적인 원보기를 만들었습니다. 레이어 반지름을 너비의 절반으로 설정하는 사용자 지정 Init 메서드를 호출하기 만하면됩니다. View Controller는 하위 뷰를 생성하고 추가 한 다음 원 중심에 대한 제약 조건을 설정합니다.자동 레이아웃을 사용하여 프로그래밍 방식으로 사용자 화 UIView 중심 지정하기

참고 : 동일한 질문에 대해 여러 개의 SO 답변을 확인 했으므로 제약 조건이 올바르게 설정되었거나 동일하게 보입니다.

제약 조건을 추가하면보기가 표시되지 않습니다. 내가 circleView 경계와 프레임을 로그 아웃하고 그들은 프레임이 처음으로 설정되어있는 0,0,100,100으로 표시하지만보기가 전혀 표시되지 않습니까? 제약 조건을 제거하면 프레임이 0,0,100,100이고이 위치에 표시됩니다. 따라서 제약 조건을 추가하면보기가 사라집니다.

- (void)viewDidLoad 
{ 
    NSLog(@"%s",__PRETTY_FUNCTION__); 
    [super viewDidLoad]; 

    [self setupViewControllerViews]; 

} 

-(void)setupViewControllerViews { 
    self.circleView = [[CCZTCircleView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
    [self.view addSubview:self.circleView]; 

    [self setupCircleViewAutoLayoutConstraints]; 
} 

-(void)setupCircleViewAutoLayoutConstraints { 
    NSLayoutConstraint *xCenterConstraint = [NSLayoutConstraint constraintWithItem:self.circleView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]; 
    NSLayoutConstraint *yCenterConstraint = [NSLayoutConstraint constraintWithItem:self.circleView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]; 

    [self.view addConstraint:xCenterConstraint]; 
    [self.view addConstraint:yCenterConstraint]; 

} 당신이 설정된 제한의 기초에 따라보기의 프레임을 변경합니다 자동 레이아웃 코코아 터치로, 자동 레이아웃을 사용하는 경우 처음에 설정 한 프레임은 무시됩니다

+0

제약 조건을 추가 한 후 [self.view setNeedsDisplay]를 시도해보십시오. –

+0

변경되지 않음 - 추가 문자 – StuartM

+0

해당 제약 조건은 정확합니다. 문제는 일정한 너비와 높이를 설정하고 적절한 AutoresizingMask (= 18)를 설정해야한다는 것입니다. 현재 18 개가 무엇을 의미하는지 알아 내려고합니다. –

답변

1

.

UIView *view = self.circleView; 

NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[view(100)]" 
options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)]; 
[self.view addConstraints:constraints]; 

constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[view(100)]" 
options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)]; 
[self.view addConstraints:constraints]; 

당신이 당신의 뷰를 작성

가하는 것이 불필요 : 방법에 다음 줄을 추가 (당신이 고정 된 높이와 고정 된 너비 제약 조건을 설정하는 것입니다 필요) 예상 된 결과를 얻기 위해 제약 당신 설치했다 자동 레이아웃으로 정의 될 프레임을 지정하십시오. 프레임이 직접적으로 관여하지 않는다는 것을 명확하게 보여주기 위해 [[UIView alloc] init]과 같이 내 견해를 인스턴스화하는 것이 유용합니다.

+0

고마워, 나는 다른 제약 접근법을 추가했지만 당신은 옳았다. 너비와 높이에 대한 제약 조건을 추가하면 문제가 해결되었습니다. – StuartM

관련 문제