1

我试图将图像水平居中放置在屏幕的最底部(无论是模拟器,还是 iPhone4、iPhone5 等)。基本上我只需要将它的 y 设置为 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 在这里是错误的......?

4

4 回答 4

2

不要使用屏幕高度,而是使用 superview 视图高度:

self.view.frame.size.height

由于子视图是根据其父视图框架放置的,而不是屏幕的框架。

您也确实有一个逻辑错误,因为您将图像视图框架高度设置为img.size.height / 2,然后使用img.size.height设置 y 坐标。

于 2013-06-01T18:36:14.160 回答
1

确保在-viewWillAppear正确计算视图控制器视图的框架时计算这些位置指标。在-viewDidLoad框架中对应于从 NIB 加载的指标,如果您的 XIB 配置为 3.5" 显示器,则 4" 显示器上的视图将更高(iPhone 5)

于 2013-06-01T21:22:08.463 回答
1

对齐屏幕底部的子视图,然后使用自动调整大小的掩码确保底部边距保持恒定为 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;
于 2013-06-01T21:35:30.833 回答
0

如果您真的非常想将其强制到屏幕底部:

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;
于 2013-06-01T23:21:13.197 回答