我试图将图像水平放置在屏幕的最底部(无论是模拟器,还是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在这里错了......?
答案 0 :(得分:2)
使用superview视图高度:
,而不是使用屏幕高度self.view.frame.size.height
由于子视图是根据超视图框架而不是屏幕框架放置的。
您还有一个逻辑错误,因为您将图片视图框架高度设置为img.size.height / 2
,然后使用img.size.height
设置y坐标。
答案 1 :(得分:1)
确保在正确计算视图控制器视图的框架时,在-viewWillAppear
中计算这些位置指标。在-viewDidLoad
中,帧对应于从NIB加载的度量标准,如果您的XIB配置为3,5“显示,则4”显示器(iPhone 5)上的视图将更高
答案 2 :(得分:1)
对齐屏幕底部的子视图,然后使用自动调整遮罩以确保底部边距保持恒定为0.这将使子视图在其超视图的底部保持对齐,即使超视图的帧发生更改。
e.g。
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;
答案 3 :(得分: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;