【问题标题】:Strange behaviour UIView height gets changed奇怪的行为 UIView 高度被改变
【发布时间】:2023-03-22 16:14:01
【问题描述】:

我遇到了我认为奇怪的行为。 如果有人能澄清这一点,那就太好了。

在 viewDidLoad 中,最初我打印 UIView 边界的高度和宽度,像这样

-(void) viewDidLoad
{
    NSLog(@"WxH = %fx%f", self.view.bounds.size.width,self.view.bounds.size.height);

}

打印:WxH = 320.000000x548.000000

现在,假设我将视图控制器旋转到横向 - 然后返回纵向,并打印相同的高度和宽度。像这样:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)x
                                         duration:(NSTimeInterval)duration
{

    // If the orientation is rotating to Portrait mode...
    if (UIInterfaceOrientationIsPortrait(x))
    {
        NSLog(@"WxH = %fx%f", self.view.bounds.size.width,self.view.bounds.size.height);


    }
    else // If the orientation is rotating to Landscape mode
    {  

    }

}

在此之后,每次我旋转时,上述方法都会打印WxH = 320.000000x460.000000(即使我在开始时打印548时处于纵向模式) 为什么高度变成了460? (然后就一直这样)

【问题讨论】:

  • 我假设您在 Retina 4 英寸显示屏上进行测试,您能否确认 UIViewAutoResizing 属性已设置为完全调整大小?
  • @iphonic:当我单击为我的视图控制器自动创建的 XIB 模板时,所有 6 条自动调整大小的线都设置为红色。我也像这样打印它:NSLog(@"mask: %d", self.view.autoresizingMask); 它打印 18
  • 我猜超级视图会自动调整其子视图的大小。在 IB 中检查 superview 的属性。而且您的超级视图的大小在设备上与在 IB 中的大小不完全相同。
  • 顺便说一句, willAnimateRotation ... 在旋转实际发生之前被调用。因此,当方向仍然是纵向时,会打印您的 NSLog,然后再将其旋转为横向。 (当然是在设备物理旋转之后)。
  • @Hermann Klecker:我正在使用 6.1 版模拟器。我用 XIB 文件创建了一个 ViewController。所以我直接使用由 XCode 创建的视图控制器的视图。 PS。您的意思是当方向仍处于横向模式时调用我的 NSLog?当我旋转到横向模式时会打印出来(如果我也将日志添加到 else 子句):` {{0, 0}, {480, 300}}`。如果我旋转到纵向模式,则会打印:{0, 0}, {320, 460}}。无论如何,您永远不会看到最初打印的 548。

标签: ios objective-c


【解决方案1】:

Portrait iphone height Total 480 ,20 for the status bar rest 460 for the self.view.

您可以以更好的方式查看日志

NSLog(@"%@",NSStringFromCGRect(self.view.bounds));

之所以如此,是因为

分辨率以点为单位,而不是像素。您的代码应该使用点,以便它可以在任何设备上运行——视网膜或非视网膜。 (澄清一下——在视网膜显示器上,每个屏幕像素是 0.5x0.5 点,在非视网膜上,像素是两倍大小,1x1 点)

【讨论】:

  • 是的,但为什么我提到的最初是 548?
  • 你为 iphone 5 构建了 xib 吗??
  • 我了解视网膜与非视网膜的概念,但它如何解释我的问题?
  • 您在 xib 中的视图高度是多少??
  • 在 XIB 中似乎是 548。
【解决方案2】:

不是在 ViewDidLoad 中获取/设置边界/大小,而是在 ViewWillAppear 中执行代码。

这不是一个“技术性”的答案,但它为我完成了工作。

【讨论】:

  • 它似乎可以解决问题,请参阅我在此处发布的内容:stackoverflow.com/questions/17882199/…
  • 添加了问题的答案。检查那里。如果它按您希望的方式工作,请接受此答案。
猜你喜欢
  • 1970-01-01
  • 2016-04-02
  • 2011-03-19
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多