如何以编程方式将图像对齐到屏幕底部?
问题描述:
我想在屏幕的最下方水平放置一个图像(不管它是模拟器还是iPhone4,iPhone5等)。基本上我只需要将其设置为screen_height - image_height。如何以编程方式将图像对齐到屏幕底部?
UIImage *img = [UIImage imageNamed:@"my-image.png"];
UIImageView *imgView = [[UIImageView alloc]initWithImage:img];
imgView.frame = CGRectMake(0, 0, img.size.width/2, img.size.height/2);
CGRect screenBounds = [[UIScreen mainScreen] bounds];
CGFloat screenScale = [[UIScreen mainScreen] scale];
CGSize screenSize = CGSizeMake(screenBounds.size.width * screenScale, screenBounds.size.height * screenScale);
CGRect frame = imgView.frame;
frame.origin.x = 0;
frame.origin.y = screenSize.height - img.size.height;
imgView.frame = frame;
[self.view addSubview:imgView];
我在做什么错? 0,0是屏幕的左上角,所以我不明白为什么screen_height - image_height在这里是错误的...?
答
确保在计算视图控制器视图的框架时正确计算-viewWillAppear
中的位置指标。在-viewDidLoad
框架对应于从NIB加载的度量标准,并且如果您的XIB配置为3,5英寸显示器,则视图将在4英寸显示器(iPhone 5)上更高。
答
代替使用屏幕高度的,使用上海华视图高度:
self.view.frame.size.height
作为子视图被放置在它的父帧,在屏幕的不是框架的条款。
您也有一个逻辑错误,因为您将图像视图帧高度设置为img.size.height/2
,然后使用img.size.height
来设置y坐标。
答
将子视图对准屏幕底部然后使用自动调整大小的掩码来确保底部边距保持为0。即使超级视图的帧发生变化,这也会使子视图保持其超级视图的底部对齐。
例如
UIImage *img = [UIImage imageNamed:@"my-image.png"];
UIImageView *imgView = [[UIImageView alloc]initWithImage:img];
imgView.frame = CGRectMake(0, 0, img.size.width, img.size.height);
CGRect frame = imgView.frame;
frame.origin.x = 0;
frame.origin.y = self.view.frame.size.height - img.size.height;
imgView.frame = frame;
imgView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
答
如果你真的想迫使它在屏幕的底部:
CGRect screenBounds = [UIScreen mainScreen].bounds;
CGRect viewFrameOnScreen = [[view superview] convertRect:view.frame toView:nil];
viewFrameOnScreen.origin.y = screenBounds.size.height - viewFrameOnScreen.size.height;
view.frame = [[view superview] convertRect:viewFrameOnScreen fromView:nil];
但我怀疑你要无条件地迫使它在屏幕的底部,即使有一个标签栏或那里的东西。除了在特殊情况下,意见不应超出其父视图的界限。如果你只是想要它在父视图的底部,那么
view.frame.origin.y = [view superview].bounds.size.height - view.frame.size.height;
你的'self.view'覆盖整个屏幕? 'frame'中的值与* superview *相关,而不是屏幕。 – Mar0ux