2014-04-11 3 views
1

NSLayoutconstraints를 프로그래밍 방식으로 내 뷰와 controller.topLayoutGuide & controller.bottomLayoutGuide에서 설정하는 데 문제가 있습니다. viewDidLoad에이 코드위쪽 및 아래쪽 레이아웃 가이드의 자동 레이아웃 문제

:

_mainView.translatesAutoresizingMaskIntoConstraints = NO; 
[self.view addSubview:_mainView]; 
[self.view removeConstraints:self.view.constraints]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[_mainView]-0-|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:NSDictionaryOfVariableBindings(_mainView)]]; 
id top = self.topLayoutGuide; 
id bottom = self.bottomLayoutGuide; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[top]-0-[_mainView]-0-[bottom]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(top, _mainView, bottom)]]; 
[self.view layoutSubviews]; 

결과가 있음 :

http://i61.tinypic.com/2h34shh.png

나는 상대적인 제약을 설정하면

(_mainView 어두운 회색 배경 색상을 갖는) superview에게 작동 :

_mainView.translatesAutoresizingMaskIntoConstraints = NO; 
[self.view addSubview:_mainView]; 
[self.view removeConstraints:self.view.constraints]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[_mainView]-0-|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:NSDictionaryOfVariableBindings(_mainView)]]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[_mainView]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_mainView)]]; 
[self.view layoutSubviews]; 

http://i62.tinypic.com/24ouiop.png

뷰 컨트롤러 계층이다 UITabBarController가 ->은 UINavigationController -> myViewController


이 해결!

[self.view removeConstraints:self.view.constraints]; 

내가

for(NSLayoutConstraint *c in self.view.constraints) 
    if(c.firstItem == _mainView || c.secondItem == _mainView) 
     [self.view removeConstraint:c]; 

으로 코드를 변경하고 일했다 :

오류였다. 어쨌든 감사합니다! ;)

답변

1

self.topLayoutGuide 및 self.bottomLayoutGuide가 nil이 아닌지 확인하십시오. 인터페이스 빌더에서 콘센트를 설정하는 것을 잊었을 수도 있습니다.

+0

해결! 오류는 "[self.view removeConstraints : self.view.constraints];"입니다. 대신 (self.view.constraints의 NSLayoutConstraint * c) if (c.firstItem == _mainView || c.secondItem == _mainView) [self.view removeConstraint : c]; " 그리고 효과가있었습니다. – user3522447