iOS 11으로 업그레이드 한 후 대개 동작이 실행 된 탐색 표시 줄 버튼 좌표에 presentPopoverFromRect:sender.frame
으로 설정된 프레임이있는 잘못된 배치 된 팝업에 문제가 발생했습니다.iOS 11로 업그레이드 한 후 잘못 배치 된 팝업 표시
문제 : (UIButton *)sender.frame
의 x 및 y 좌표는 {0,0}과 동일한 이고 화면의 왼쪽 상단 모서리에 팝업이 표시됩니다.
사용자 탐색 버튼을 생성하는 generateToolbar()
방법입니다. 여기
-(void) generateToolbar {
// Initialize the `ButtonFactory`
ButtonFactory *buttonFactory = [[ButtonFactory alloc] init];
// Generate some UIButton(s)
UIButton *userUIBtn = [buttonFactory createButtonWithButtonType:ButtonTypeUser iconVisibility:YES textVisibility:NO capitalization:NO iconSize:20 textSize:10];
userUIBtn.frame = CGRectMake(0,0,55,20);
[userUIBtn addTarget:self action:@selector(userButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
// Generate an `UIBarButtonItem` with the `UIButton` as basis
UIBarButtonItem *userBtn = [[UIBarButtonItem alloc] initWithCustomView:userUIBtn];
// Add the `UIBarButtonItem` into the right side of the `navigationItem`
self.navigationItem.rightBarButtonItems = [[NSArray alloc] initWithObjects: userBtn, nil];
DDLogVerbose(@"A: generateToolbar UIButton FRAME: %@",NSStringFromCGRect(userUIBtn.frame));
}
은 사용자 버튼을 누름으로써 트리거하는 버튼 주위 팝 오버를 생성 도착 userButtonPressed()
방법이다. - (IBAction) userButtonPressed:(UIButton *)sender {
// Initialize the `ButtonFactory`
ButtonFactory *buttonFactory = [[ButtonFactory alloc] init];
// Generate some UIButtons
UIButton *feedbackUIBtn = [buttonFactory createButtonWithButtonType:ButtonTypeFeedback iconVisibility:YES textVisibility:YES capitalization:NO iconSize:20.0 textSize:20.0];
[feedbackUIBtn addTarget:self action:@selector(feedbackBtnClicked:) forControlEvents:UIControlEventTouchUpInside];
feedbackUIBtn.frame = CGRectMake(0,50,300,50);
// Create a `UIViewController` and add the `UIButtons` as subviews
UIViewController *viewController = [[UIViewController alloc] init];
[viewController.view addSubview:feedbackUIBtn];
[viewController.view addSubview:crashUIBtn];
// Create the `UIPopoverController`
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
self.mainPopoverController = [[UIPopoverController alloc] initWithContentViewController:navigationController];
self.mainPopoverController.popoverContentSize = CGSizeMake(300, 100);
DDLogVerbose(@"B: userButtonPressed SENDER FRAME: %@",NSStringFromCGRect(sender.frame));
// Present the `UIPopoverController`
[self.mainPopoverController presentPopoverFromRect:sender.frame inView:self.view permittedArrowDirections: UIPopoverArrowDirectionLeft | UIPopoverArrowDirectionUp animated:YES];
}
로그 출력 -은 X가 Y 좌표 {0, 0}
동등한 두 곳에서, 잘못 그들은 UIBarButtonItem
의 배위 실제 비 - 제로와 동일해야한다 :
A: generateToolbar UIButton FRAME: {{0, 0}, {55, 20}}
B: userButtonPressed SENDER FRAME: {{0, 0}, {55, 32}}
질문에 _relevant_ 코드 만 표시하십시오. NSAttributedString 할당을 읽지 않아도됩니다. 어쩌면 [mcve]의 읽을 수있다 –