UIView frame.width大小不正确(在iOS 6设备上)

时间:2015-01-21 11:47:54

标签: ios objective-c iphone uiview ios6

我们正在尝试以编程方式在我们游戏的iOS主视图中添加UIView(FB Like按钮)(*游戏使用Unity构建)。

添加类似按钮的代码:

like = [[FBLikeControl alloc] init];

// Calculate position.

int screenWidth = UnityGetGLViewController().view.bounds.size.width;
int screenHeight = UnityGetGLViewController().view.bounds.size.height;

int likeWidth = like.frame.size.width;
int likeHeight = like.frame.size.height;

int xPos = screenWidth - likeWidth;
int yPos = screenHeight - likeHeight;

like.frame = CGRectMake(xPos, yPos, likeWidth, likeHeight);

[UnityGetGLViewController().view addSubview:like];

在我们测试过的大多数设备上,这种设备运行良好,并将按钮显示在正确的位置(右下角)。

在一些iOS设备(运行iOS 6)上,按钮被剪切。看起来它的 frame.width正好等于其正确大小的0.5(一半)!但只有宽度......

可能是什么原因?这是iOS 6或特定设备的一些已知错误吗?或者我们的代码不正确?

1 个答案:

答案 0 :(得分:0)

我建议尝试使用 initWithFrame:方法构建按钮,并为其提供修复宽度和高度。 我知道这不是最好的答案,但我调查了这个类,它有代码,当你不提供它时,应该计算它的大小。这段代码中可能存在错误,但我不确定。

建议的最后一句话:你应该使用CGGeometry.h中的辅助方法来检索框架信息:(CGRectGetHeight(),CGRectGetWidth(),CGRectGetMinX(),CGRectGetMinY()。在int的情况下使用CGFloat也是一个从我的观点来看,这是个好主意。)

CGFloat screenWidth = CGRectGetWidth(UnityGetGLViewController().view.bounds);
CGFloat screenHeight = CGRectGetHeight(UnityGetGLViewController().view.bounds)

CGFloat likeWidth = CGRectGetWidth(like.frame);
CGFLoat likeHeight = CGRectGetHeight(like.frame);