我想要显示一个提示,以获取用户的用户名和密码。
为此,我显示了一个UIAlertView,并将UITextFields作为子视图添加到其中。
最近,我将项目转移到了XCode 4.2,并更新了所有的项目设置。我的基础SDK设置为iOS 5.0,部署目标设置为4.0。
然后我注意到它只是为armv7架构构建的,所以我把它改成也包括armv6,因为我也想支持iPhone 3G。
这样做之后,我注意到UIAlertView没有像以前那样向上移动,现在当它显示时,它被键盘覆盖了。我在苹果文档中读到,你不应该子类化UIAlertViews (http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAlertView_Class/UIAlertView/UIAlertView.html),所以我改变了我做事情的方式。这并没有解决问题。
我注意到,我可以通过设置Build设置- "Build active architecture only“设置为YES,让它在我的手机( iPhone 4,所以是armv7架构)上工作。
我怀疑这个问题与试图为armv6构建有关(实际上,从我试图为其构建的体系结构中删除它会给我正确向上移动的警报)。
我想我现在应该开始我的问题了..。我很难理解为什么会这样。我在某处读到(现在找不到链接),在iOS 4和更高版本中向UIAlertView添加文本字段时,不需要手动上移警报。既然我构建的至少是iOS 4,那么这不是应该在两种架构上都能工作吗?
另外,我如何才能让它为armv6构建,并且仍然有正确向上移动的警报?
编辑:也许我错了,但我注意到我的手机有两个实例,我可以将应用程序部署到其中。选择第一个并构建给我一个应用程序,在这个应用程序中,UIAlertViews不会在应该向上移动的时候移动,但选择第二个可以让它正常工作。我会发布一个截图,但我是一个新用户,所以我还没有必要的权限...
发布于 2011-11-24 18:52:22
好的,
我已经设法想出了一个有效的解决方案,使UIAlertView处于正确的位置,但我仍然不能完全确定问题的根本原因是什么。
我通过响应UIAlertViewDelegate方法willPresentAlertView:并执行以下操作解决了这个问题
- (void) willPresentAlertView: (UIAlertView *) alertView {
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
if (keyWindow.center.y - alertView.center.y < 0.001f) {
CGPoint center = [alertView center];
center.y = center.y - 108.0f;
[alertView setCenter:center];
}
}它检查UIAlertView是否在屏幕的中心,如果是,则将其向上移动(即,如果操作系统还没有计算出它的正确位置)。注意:如果您希望纵向和横向都适用,则需要检查设备所处的特定方向,然后相应地调整警报向上移动的数量。
https://stackoverflow.com/questions/8240540
复制相似问题