facebook과 같은 사이드 메뉴가있는 응용 프로그램을 만들었습니다. 나는 그 자체를 통해 뷰를 추가하는 루트 뷰 컨트롤러를 가지고 있는데, 사용자가 'Menu'버튼을 누르면 뷰를 넘기 때문에 메뉴를 볼 수있다.UINavBar가 다른 버튼 위에 보이지 않는 레이어가있는 것 같습니다.
내 문제는 뷰를 처음로드 할 때 UINavBar가 약 20 픽셀 정도이거나 그 이하이어야한다는 것입니다. 다음 자동
그것을 (아래 이미지는 모달 수평 플립 때문에 조금 떨어져서 중심 보인다) 자체를 조정하고 모달 전환이 완료 될 때 단지 상태 막대 아래까지 이동한다. 여기
내가 "메뉴"버튼을 누를 때 발생의 스크린 샷이다. 그것은 오른쪽 위에 평면도를 슬라이드내가 빨간색으로 설정 왼쪽 화살표 및 오른쪽 화살표 프레임 배경이 이상 내가 어디 클릭/tappable 지역을 볼 수 있도록 이미지에서 볼 수 있듯이
입니다. 파란색 선을 클릭하면 파란색 선이 그려지고 다른 선은 노란색 선을 클릭하면 오른쪽 화살표가 표시되지 않습니다. 왼쪽의 동일한 일반 영역을 클릭하면 메뉴 버튼이 트리거됩니다. 필자는 시뮬레이터와 모바일 장치에서 이것을 재현 할 수 있습니다. (그래서 나는 손가락을 쥐고 있지 않습니다.)
탐색 모음 낮은로드되어 있기 때문에 아이폰이 나는 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
의 절반을 수신하지 못하는 것으로 나타납니다.
게시 한 첫 번째 코드 조각에서 콘텐츠보기 범위와 탐색 컨트롤러 프레임을 모두 기록 할 수 있습니까? NSStringFromCGRect를 사용하여 콘솔에 인쇄 할 수있는 표준 문자열을 가져옵니다. – Sam
@Sam 바인딩 된 로그를 포함하도록 OP를 편집했습니다. – Bot