0

我正在自学 IOS 开发,但我在尝试做的一项练习中遇到了问题。基本上我有一个我想要显示的图片列表,所以我创建了一个包含这些图片列表的表格视图,目标是单击一个单元格并显示图片自动缩放到屏幕大小。我已经关闭了 ARC,所以我可以自己学习管理内存。

当我在表格视图中选择一个单元格时,它会调用具有滚动视图和图像视图的 UIViewController。

故事板快照

这就是我连接插座的方式:

插座是如何连接的

在方法 viewWillAppear 下的 PhotoViewController 的实现中,我编写了以下代码:

- (void) viewWillAppear:(BOOL)animated{

[super viewWillAppear:animated];

[self.scrollView setZoomScale:1 animated:NO];
CGSize boundsSize = self.scrollView.bounds.size;
NSLog(@"@@@AMRO scrollboundsSize  is width %f and height %f", boundsSize.width, 
boundsSize.height);   

我需要 boundsSize 来帮助我弄清楚如何缩放我的图片。问题是它总是读为零。我知道根据情节提要,boundsSize 是 320x455。显然我不想硬编码它。

在那个 PhotoViewController 的 .h 中,我定义了:

@property (strong, nonatomic) IBOutlet UIImageView *imageView;
@property (strong, nonatomic) IBOutlet UIScrollView *scrollView;

现在,如果在 ViewWillAppear 中,我会这样做:

CGRect fullScreenRect=[[UIScreen mainScreen] applicationFrame];
self.scrollView=[[UIScrollView alloc] initWithFrame:fullScreenRect];

然后我得到了要定义的边界,但是大小是关闭的,它的宽度是 320.000000,高度是 548.000000。我知道548的高度可能是因为它包括底部的标题栏和标签栏。有没有办法让我根据故事板中看到的 320 x 455 的视图正确设置边界。我查看了其他人做同样事情的代码片段,他们甚至没有分配滚动​​视图,是因为 ARC 是 ON 并且这是自动管理的吗?

如果我使用这种方法,那么我确实得到了正确的大小,但这是正确的方法吗,我已经看到了滚动视图从未初始化但它们的边界设置正确的示例

CGRect viewBounds = self.view.bounds;
self.scrollView=[[UIScrollView alloc] initWithFrame:viewBounds];
4

2 回答 2

3

尝试使用该方法viewDidAppear来获取边界和其他大小,而不是viewWillAppear.

您的滚动视图边界在执行时可能仍未初始化viewWillAppear

于 2013-10-13T19:51:16.980 回答
1

如果您需要在视图出现在屏幕上之前执行几何相关的代码,您可以将它放在 viewDidLayoutSubviews

@interface CustomViewController ()

@property (nonatomic) BOOL isFirstTimeViewDidLayoutSubviews; // variable name could be re-factored

@end

@implementation CustomViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.isFirstTimeViewDidLayoutSubviews = YES;
}

- (void)viewDidLayoutSubviews
{
    // only after layoutSubviews executes for subviews, do constraints and frames agree (WWDC 2012 video "Best Practices for Mastering Auto Layout")

    if (self.isFirstTimeViewDidLayoutSubviews) {

        // execute geometry-related code...
    }

    self.isFirstTimeViewDidLayoutSubviews = NO;
}
于 2013-10-14T01:38:00.060 回答