嵌入在UIScrollView中的图像不会显示在UIPopoverController

时间:2016-05-29 15:14:52

标签: ios objective-c uipopovercontroller

作为iOS编程的新手,我在UIPopoverController中工作时对UIImageView和UIScrollView有点困惑。他们在这里......

一个UIViewController,其视图指向UIScrollView,其子视图是UIImageView。在UIViewController初始化期间,UIImageView的image属性由另一个类设置。

-(void)loadView{
    self.scrollView=[[UIScrollView alloc]init];
    self.imageView=[[UIImageView alloc]init];
    self.imageView.contentMode=UIViewContentModeScaleAspectFit;
    [self.scrollView addSubview:self.imageView];
    self.view=self.scrollView;
}

-(void)viewWillAppear:(BOOL)animated{
     [super viewWillAppear:animated];
    self.imageView.image=self.image;
    self.scrollView.contentSize=self.imageView.image.size;
}

然后我把UIViewController作为UIPopoverController的contentViewController,然后在响应块中弹出。

cell.actionBlock=^{
            NSLog(@"Going to show image for %@", item);
            BNRItemCell* strongCell=weakCell;
            if([UIDevice currentDevice].userInterfaceIdiom==UIUserInterfaceIdiomPad){
                NSString* itemKey=item.itemKey;
                UIImage* img=[[BNRImageStore sharedStore]imageForKey:itemKey];
                if(!img){
                    return;
                }
                CGRect rect=[self.view convertRect:strongCell.thumbnailView.bounds fromView:strongCell.thumbnailView];

                BNRImageViewController* ivc=[[BNRImageViewController alloc]init];
                ivc.image=img;
                self.imagePopover=[[UIPopoverController alloc]initWithContentViewController:ivc];
                self.imagePopover.delegate=self;
                self.imagePopover.popoverContentSize=CGSizeMake(600,600);
                [self.imagePopover presentPopoverFromRect:rect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
            }
        };

当块运行时,弹出窗口显示但没有显示图像,我确信图像已正确设置,UIScrollView的contentSize也设置为图像大小。

当我将UIViewController的视图直接更改为UIImageView时,图像显示。我不确定会发生什么以及为什么滚动视图中的图像不可见。

2 个答案:

答案 0 :(得分:0)

可能不同之处在于控制器调整其view的大小以适应其容器边界,而您从未在此处设置图像视图的框架。 Here's an example显示了如何做到这一点。改为

-(void)viewWillAppear:(BOOL)animated{
     [super viewWillAppear:animated];
    self.imageView.image = self.image;
    self.imageView.frame.size = self.image.size;
    self.scrollView.contentSize = self.imageView.frame.size;
}

应该正确设置。

答案 1 :(得分:0)

虽然我仍然有些困惑但我已经修好了。

图片没有显示,因为我没有将框架设置为UIImageView驻留在UIScrollView中。当我通过提供CGRect数据使用initWithFrame时,图像以指定维度显示。

问题是,如果我将UIImageView作为子视图添加到UIScrollView,然后将UIScrollView作为UIWindow的根视图,在另一个试验项目中,使用&#init;只有没有指定的框架集,才能看到图像......

我应该何时为UIView设置框架以及何时不需要......