UIPopoverController for iphone in ios8 shows white screen

Using the UIPopovercontroller below ios8.0 on iphone works fine with this code. But in ios8 it displays a white screen.

Code:

pickerController = [[UIViewController alloc] init]; UIView *viewV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 150, 160)]; [viewV setBackgroundColor:[UIColor clearColor]]; popOverController = [[UIPopoverController alloc] initWithContentViewController:pickerController]; popOverController.popoverContentSize = CGSizeMake(150, 160); [popOverController setDelegate:self]; CGRect ImageBtnFrame = [self.view convertRect:sender.frame fromView:self.view]; [popOverController presentPopoverFromRect:ImageBtnFrame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

Any alternative for ios8 to offer.

+6
source share
3 answers

Try using the new iOS 8 API for popovers.

 pickerController = [[UIViewController alloc] init]; UIView *viewV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 150, 160)]; [viewV setBackgroundColor:[UIColor clearColor]]; UIPopoverPresentationController *popOverController = pickerController .popoverPresentationController; popOverController.popoverContentSize = CGSizeMake(150, 160); [popOverController setDelegate:self]; popOverController.sourceView = self.view; popOverController.sourceRect = sender.frame; popOverController.permittedArrowDirections = UIPopoverArrowDirectionUp; [self presentViewController:popOverController animated:YES completion:nil]; 
+2
source

According to 2014 WWDC , within a 30-minute mark, the correct answer is:

 - (void) tapButton:(id) sender { MyViewControllerClass * vc = [[MyViewControllerClass alloc] init]; vc.modalPresentationStyle = UIModalPresentationPopover; UIPopoverPresentationController * popOverController = vc.popoverPresentationController; [popOverController setDelegate:self]; popOverController.sourceView = sender; popOverController.sourceRect = ((UIButton*)sender).frame; popOverController.permittedArrowDirections = UIPopoverArrowDirectionUp; [self presentViewController:vc animated:YES completion:nil]; } 

Please note that the accepted answer has some problems, such as:

  • Do not set modalPresentationStyle
  • UIPopoverPresentationController * instead of UIViewController
+11
source

This will lead to iOS 8. Therefore, I recommended using the following Github library. https://github.com/skywinder/ActionSheetPicker-3.0 or you can write the code base in the iOS version.

  if (OLDER_THAN_IOS_8) { // Your regular code pickerController = [[UIViewController alloc] init]; UIView *viewV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 150, 160)]; [viewV setBackgroundColor:[UIColor clearColor]]; popOverController = [[UIPopoverController alloc] initWithContentViewController:pickerController]; popOverController.popoverContentSize = CGSizeMake(150, 160); [popOverController setDelegate:self]; CGRect ImageBtnFrame = [self.view convertRect:sender.frame fromView:self.view]; [popOverController presentPopoverFromRect:ImageBtnFrame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; } else { // New Code that support iOS -8 using UIPopoverPresentationController // Checkout @AndreasZ answer for the same } 
+2
source

Source: https://habr.com/ru/post/976717/


All Articles