6

我一直在将警报视图稍微移高一点,这样我也可以在屏幕上安装一个键盘。我只是通过抓取警报的框架并在我已经显示警报后更改 Y 来做到这一点,以便框架变量是合法的。这在模拟器上工作得很好,但是当我在硬件上这样做时,警报从正确的位置开始,但几乎立即跳到它原来的垂直中心位置。UIAlertView 位置是一个固定的东西,不应该根据可用性指南改变,还是我只是做错了什么?

谢谢!

4

3 回答 3

22

您正在尝试针对什么操作系统?我让它在 OS 3.0 模拟器和 OS 3.0 设备上都可以工作:

UIAlertView * alert = [ [ UIAlertView alloc ] initWithTitle:@"Alert" message:@"Alert" 
                        delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil ];

alert.transform = CGAffineTransformTranslate( alert.transform, 0.0, 100.0 );

[ alert show ];

CGAffineTransformTranslate接受三个参数:现有变换、x 变换和 ay 变换。在我使用的示例中,警报视图比正常情况高出 100 像素。试一试,看看会发生什么。

另外,我很确定您可以在显示警报之前修改框架,因为它可能会将警报的框架init默认设置为整个屏幕的中心。

于 2009-06-25T03:05:07.833 回答
2

由于 iOS4 移动 UIAlertViews 变得棘手。我注意到,如果您在 UIAlertView 上添加 UITextField 子视图,则在 iOS4 上,警报会向上移动,以便键盘不会与它重叠。这不会发生 < iOS4。

此外,我注意到即使在调用 show 之后警报的框架也没有初始化,因此没有简单的编程方式来执行相对 CGAffineTransformation。唯一的解决方案是根据操作系统版本进行条件转换。

对我来说,这看起来像是对 UIAlertViews 的未记录行为进行线程化,这种行为随时可能发生变化。我不认为 Apple 打算让我们将警报用于文本和按钮以外的任何内容(即使他们自己的应用程序违反了此规则)。

我将开始为此类场景构建自己的自定义警报。

于 2010-10-28T07:41:47.333 回答
1

警报不应该是模态的吗?即:当警报处于活动状态时,您通常不会执行任何其他用户输入?如果是这种情况,那么您为什么需要键盘的可见性?

于 2009-06-24T18:24:31.480 回答