2016-08-03 5 views
0

어떤 이유로 든 내 UIWindowrootViewController의 여백이 왼쪽과 오른쪽에 16, 위쪽과 아래쪽에 0으로 설정되어 있습니다. 불행히도 필자는 모든 것을 수동으로 초기화하는 레거시 (읽기 : 비 스토리 보드) 응용 프로그램을 사용하고 있습니다. 이것은 출력루트보기 컨트롤러 여백이 홀수 값으로 설정되었습니다.

다음 내가 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

코드

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
self.window.rootViewController = [[UIViewController alloc] init]; 
[self.window makeKeyAndVisible]; 

UIEdgeInsets insets = self.window.layoutMargins; 
NSLog(@"Left %f, Right %f, Bottom %f, Top %f", insets.left, insets.right, insets.bottom, insets.top); 
insets = self.window.rootViewController.view.layoutMargins; 
NSLog(@"Left %f, Right %f, Bottom %f, Top %f", insets.left, insets.right, insets.bottom, insets.top); 

생산에서이 코드가 0

의 아래쪽 여백을 가지고 주장하는 많은 레이어 깊은 뷰 컨트롤러에 영향을

2016-08-03 18:10:24.280 app[426:182429] Left 8.000000, Right 8.000000, Bottom 8.000000, Top 8.000000 
2016-08-03 18:10:24.280 app[426:182429] Left 16.000000, Right 16.000000, Bottom 0.000000, Top 0.000000 

편집

나는 마침내 이것이 예상되는 동작임을 알게되었습니다. 그러나 새로운 UIViewController를 푸시 할 때 아래쪽 여백이 추가되지 않는다는 것에 놀랐습니다. 이 예상되는 동작입니까? iOS에서 하단 마진을 기대하지 않아야합니까?

답변

0

설명하는 여백은 "안내선"에 불과합니다. 레이아웃 제약 조건의 일부로 사용하지 않는 한보기 레이아웃에 영향을주지 않습니다. 프레임/경계를 사용하기로 결정한 경우 레이아웃에 전혀 영향을주지 않습니다.

+0

나는 내보기를 배치 할 때 layoutMargins에 의존하고 있었고, 단추가보기의 맨 아래에 놓이지 만 외부에서 설정한다는 것이 이상하다는 것을 알게되었습니다. 내 생각에 이것은 예상 된 것 같지만 스토리 보드와 XIB를 함께 사용하는 경우 하단 및 상단 레이아웃 가이드를 사용하도록 제안합니다. 무슨 유산이 계속되고있는 것처럼 보입니다. – JustinHK

+0

AutoLayout을 사용하는 것과 프레임/경계를 사용하는 것의 차이점을 분명히 이해했는지 확인하십시오. 마진 지침에 대한 귀하의 기대는 시스템마다 다를 것입니다. – bsarrazin

+0

필자는 autolayout 만 사용한 적이 있습니다. iOS에서 단일 페이지 응용 프로그램을 만들고 위쪽, 아래쪽 및 측면 여백에 유일한 하위보기를 잠그면 가장자리에 손이 닿지 않지만 터치하지 않습니다. 화면의 상단과 하단. – JustinHK