【发布时间】:2010-11-15 13:29:23
【问题描述】:
我在我的应用程序中使用子类 UIAlertView 窗口作为登录提示(我知道这违反了 Apple 准则,但它不会提交到应用商店,所以这不是问题)。
添加文本字段和在屏幕上定位窗口的代码如下所示:
- (id)initWithTitle:(NSString *)title delegate:(id)delegate
{
if (self = [super initWithTitle:title message:@"\n\n\n" delegate:delegate cancelButtonTitle:@"Cancel" otherButtonTitles:@"Login", nil]) {
UITextField *loginTF = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 55.0, 260.0, 25.0)];
// text field settings removed for code clarity
[self addSubview:loginTF];
self.loginTextField = loginTF;
[loginTF release];
UITextField *passwordTF = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 85.0, 260.0, 25.0)];
// text field settings removed for code clarity
[self addSubview:passwordTF];
self.passwordTextField = passwordTF;
[passwordTF release];
CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 90.0);
[self setTransform:translate];
}
return self;
}
问题在于setTransform 调用:
在 iOS 3.x 上:
- 没有setTransform:窗口在屏幕上水平和垂直居中显示,屏幕键盘部分显示在其顶部 - 所以整个窗口不可见
- setTransform:窗口显示高 90 像素,因此在显示屏幕键盘时整个可见。
然而,在 iOS 4.x 上:
- 没有setTransform:窗口显示得非常好(在屏幕键盘上方可见)
- 带有setTransform:窗口部分显示在屏幕上边框上方(90 像素太高)。
这个问题的最佳解决方案是什么?检测iOS版本并有条件地调用setTransform?或者它太丑陋了,有更好的方法吗?
【问题讨论】:
标签: iphone iphone-sdk-3.0 ios4 uialertview