iOS开发中UIPopoverController的使用详解

2020-01-14 17:18:36王旭

    //2.新建一个popoverController,并设置其内容控制器
    self.popover=[[UIPopoverController alloc]initWithContentViewController:menuVc];
    
    //3.设置尺寸
    self.popover.popoverContentSize=CGSizeMake(300, 200);
    
    //4.显示
    [self.popover presentPopoverFromBarButtonItem:self.navigationItem.leftBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
更好的设计是:popover的尺寸应该由内部控制器的内容所决定。

 

内容控制器可以自行设置自己在popover中显示的尺寸,其中有两种方法:

(1)在iOS 7之前  @property (nonatomic,readwrite) CGSize contentSizeForViewInPopover;

(2)从iOS 7开始  @property (nonatomic) CGSize preferredContentSize;

  以上属性都是UIViewController的

复制代码
-(NSArray *)menus
{
    if (_menus==nil) {
        _menus=@[@"列表1",@"列表2",@"列表3",@"列表4",@"列表4",@"列表4",@"列表4",@"列表4",@"列表4",@"列表4",@"列表1",@"列表2",@"列表1",@"列表2"];
    }
 return _menus;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    //设置控制器将来在popover中的尺寸
    CGFloat maxH=MIN(480,self.menus.count*44);
    //ios7以前的设置
//    self.contentSizeForViewInPopover=CGSizeMake(150, maxH);
    //ios7以后
    self.preferredContentSize=CGSizeMake(150, maxH);
    
}
效果:

 

iOS开发中UIPopoverController的使用详解

关于MIN(A,B)的说明,最终的大小取决于B,但是最大不能超过A,如果超过A那么值就等于A。