我正在教自己IOS开发,我遇到了一个问题,我试图做的一个练习。基本上我有一个我想要显示的图片列表,所以我创建了一个带有这些图片列表的表视图,目标是单击一个单元格并将图片自动显示为屏幕大小。我关闭了ARC,所以我可以学会自己管理记忆。
当我在表视图中选择一个单元格时,它会调用一个具有滚动视图和图像视图的UIViewController。
这就是我连接插座的方式:
在PhotoViewController的方法viewWillAppear下的实现中,我写了这段代码:
- (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×455。我看了其他人做同样事情的代码片段,他们甚至没有分配scrollView,是因为ARC是ON而且是自动管理的东西?
如果我使用这种方法,那么我确实得到了正确的大小,但这是正确的方法,我看过滚动视图从未初始化但是它们正确设置了边界的示例
CGRect viewBounds = self.view.bounds;
self.scrollView=[[UIScrollView alloc] initWithFrame:viewBounds];
答案 0 :(得分:3)
尝试使用方法viewDidAppear
获取边界和其他尺寸,而不是viewWillAppear
。
执行viewWillAppear
时,您的滚动视图边界可能仍未初始化。
答案 1 :(得分: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;
}