6

facebook과 같은 사이드 메뉴가있는 응용 프로그램을 만들었습니다. 나는 그 자체를 통해 뷰를 추가하는 루트 뷰 컨트롤러를 가지고 있는데, 사용자가 'Menu'버튼을 누르면 뷰를 넘기 때문에 메뉴를 볼 수있다.UINavBar가 다른 버튼 위에 보이지 않는 레이어가있는 것 같습니다.

내 문제는 뷰를 처음로드 할 때 UINavBar가 약 20 픽셀 정도이거나 그 이하이어야한다는 것입니다. 다음 자동

enter image description here

그것을 (아래 이미지는 모달 수평 플립 때문에 조금 떨어져서 중심 보인다) 자체를 조정하고 모달 전환이 완료 될 때 단지 상태 막대 아래까지 이동한다. 여기

enter image description here

내가 "메뉴"버튼을 누를 때 발생의 스크린 샷이다. 그것은 오른쪽 위에 평면도를 슬라이드

내가 빨간색으로 설정 왼쪽 화살표 및 오른쪽 화살표 프레임 배경이 이상 내가 어디 클릭/tappable 지역을 볼 수 있도록 이미지에서 볼 수 있듯이 enter image description here

입니다. 파란색 선을 클릭하면 파란색 선이 그려지고 다른 선은 노란색 선을 클릭하면 오른쪽 화살표가 표시되지 않습니다. 왼쪽의 동일한 일반 영역을 클릭하면 메뉴 버튼이 트리거됩니다. 필자는 시뮬레이터와 모바일 장치에서 이것을 재현 할 수 있습니다. (그래서 나는 손가락을 쥐고 있지 않습니다.)

enter image description here

탐색 모음 낮은로드되어 있기 때문에 아이폰이 나는 UIButton 프레임 내부를 클릭 아직도 메뉴를 트리거 될 때 그렇게 그 자리에 여전히 생각에이 생각보다 나에게 보인다 화살표 선택자를 트리거하지 않습니다. 화살표의 중간에서 직접 탭하면 화살표 선택자를 트리거하지만 이미지 외부의 작은 비트는 화살표 선택자를 트리거하지 않습니다. 여기

RootViewController있는 viewDidLoad

AppointmentViewController *appointmentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"AppointmentViewController"]; 
NSLog(@"B: %@",NSStringFromCGRect(appointmentViewController.view.frame)); 
self.navController = [[UINavigationController alloc] initWithRootViewController:appointmentViewController]; 
NSLog(@"B2: %@",NSStringFromCGRect(appointmentViewController.view.frame)); 
NSLog(@"Nav Bounds: %@",NSStringFromCGRect(self.navController.view.frame)); 
NSLog(@"Bounds: %@",NSStringFromCGRect(self.contentView.bounds)); 
self.navController.view.frame = self.contentView.bounds; 
NSLog(@"Nav Bounds2: %@",NSStringFromCGRect(self.navController.view.frame)); 
[self addShadowToMenu]; 
[self.contentView addSubview:self.navController.view]; 

RootViewController 로그

2012-04-30 12:24:44.533 My-App[19929:fb03] B: {{0, 20}, {320, 460}} 
2012-04-30 12:24:44.535 My-App[19929:fb03] B2: {{0, 20}, {320, 460}} 
2012-04-30 12:24:44.535 My-App[19929:fb03] Nav Bounds: {{0, 0}, {320, 480}} 
2012-04-30 12:24:44.535 My-App[19929:fb03] Bounds: {{0, 0}, {320, 460}} 
2012-04-30 12:24:44.535 My-App[19929:fb03] Nav Bounds2: {{0, 0}, {320, 460}} 

AppointmentViewController

self.title = [dataObj.preferences objectForKey:@"appts_name_plural"]; 
self.navigationItem.title = self.title; 
dayView = [[APCalendarDayView alloc] initWithCalendarView:(APCalendarView *)self]; 
APListView = [self.storyboard instantiateViewControllerWithIdentifier:@"AppointmentListView"]; 
APListView.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 


SideMenuView *myDelegate = [[SideMenuView alloc] init]; 
[self setSideMenuDelegate:myDelegate]; 
//set the delegate's currentViewController property so that we can add a subview to this View. 
[sideMenuDelegate setCurrentViewController:self]; 

UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
UIBarButtonItem *today = [[UIBarButtonItem alloc] initWithTitle:@"Today" style:UIBarButtonItemStyleBordered target:nil action:@selector(todayPressed)]; 
NSArray *appointmentNavigationItems = [[NSArray alloc] initWithObjects:@"Day",@"List",@"Month", nil]; 
navcontrol = [[UISegmentedControl alloc] initWithItems:appointmentNavigationItems]; 
[navcontrol setSegmentedControlStyle:UISegmentedControlStyleBar]; 
[navcontrol addTarget:self action:@selector(appointmentNavigationClicked:) forControlEvents:UIControlEventValueChanged]; 
[navcontrol setSelectedSegmentIndex:0]; 
UIBarButtonItem *segmentItems = [[UIBarButtonItem alloc] initWithCustomView:navcontrol]; 

NSArray *items = [NSArray arrayWithObjects:today,flexSpace,segmentItems, flexSpace, nil]; 
[appointmentToolbar setItems:items animated:NO]; 
[appointmentToolbar setAutoresizesSubviews:YES]; 


[[self.view superview] addSubview:myDelegate.view]; 
[self setViewSizeOffset:(appointmentToolbar.bounds.size.height)]; 

CalendarDayView

입니다

headerView을 더 멀리 아래로 이동하면 빨간색 영역의 아무 곳이나 선택하고 화살표 선택기를 트리거 할 수 있습니다. 그러나 사과 캘린더와 일치시키고 탐색 표시 줄 바로 아래에 있어야합니다.

탐색 막대가 headerView의 상단 부분을 두드리지 못하게하는 이유를 알고 계십니까? 블로킹 된 headerView의 부분이 청색 선의 아래쪽부터 위로 올라가고 있다는 것을 분명히하기 위해서입니다. 빨간색 배경의 UIButton에는 프레임에 연결된 동작이 있으므로 이벤트를 트리거해야합니다. 그러나 navbar가 UIButton의 절반을 수신하지 못하는 것으로 나타납니다.

+0

게시 한 첫 번째 코드 조각에서 콘텐츠보기 범위와 탐색 컨트롤러 프레임을 모두 기록 할 수 있습니까? NSStringFromCGRect를 사용하여 콘솔에 인쇄 할 수있는 표준 문자열을 가져옵니다. – Sam

+0

@Sam 바인딩 된 로그를 포함하도록 OP를 편집했습니다. – Bot

답변

1

이 동작은 UIWindow가 탐색 모음 프레임과 일치하는 터치를 전파하지 않기 때문에 발생합니다. 이 동작을 재정의하는 유일한 방법은 UIWindow의 하위 클래스를 만들고 hitTest : 메서드를 재정의하는 것입니다. 이렇게하면이 영역에서 터치를 감지하여 적절한 응답자에게 전달할 수 있습니다.

Here은 화면의 어느 부분 에나 반응하는 사용자 정의 UIWindow 하위 클래스를 보여주는 예제 프로젝트입니다.

+0

이 방법이 나에게 어떻게 적용되는지, 그리고 내 요구에 어떻게 사용하는지 예를 들려 줄 수 있습니까? – Bot

관련 문제