【问题标题】:Distinguish between iPhone 4 and 5 to set height of UITableView区分 iPhone 4 和 5 来设置 UITableView 的高度
【发布时间】:2014-03-02 17:03:03
【问题描述】:

我想检查用户设备是 iPhone 4 还是 5,然后设置 tableView 的高度。 xCode 模拟器识别出它是 iPhone 4,显示消息“iPhone 4”,但 tableView 的高度保持不变。我做错了什么?

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        // iPhone 4

        NSLog(@"iPhone 4");
        myTableView.frame = CGRectMake(0, 44, 320, 200);
    }
    if(result.height == 568)
    {
        // iPhone 5

        self.myTableView.frame = CGRectMake(0, 44, 320, 288);
    }
}

【问题讨论】:

  • 你为什么要这样做?使用自动布局
  • 您引用了myTableViewself.myTableView。你确定这些引用指向同一个对象吗?
  • 当键盘覆盖tableView时我可以使用自动布局吗,因为这就是我想要这样做的原因?
  • @bneely 是的,很抱歉,我忘了再次更改此设置,因为我在没有 self 的情况下尝试过。
  • @user3298017如果您想根据键盘是否可见来更改布局,您可以响应通知来执行此操作。这是另一个解决此问题的 StackOverflow 问题:stackoverflow.com/questions/1490573/…

标签: iphone objective-c uitableview frame cgrectmake


【解决方案1】:

假设更新后的要求是正确的,以下应该可以工作:

#define iPhoneType (fabs((double)[UIScreen mainScreen].bounds.size.height - (double)568) < DBL_EPSILON) ? @"5" : ([UIScreen mainScreen].scale==2 || UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? @"4" : @"3")

对于 4" 屏幕 iPhone 和 iPod touch,这将返回 @"5"。对于所有 iPad 和视网膜 iPhone 和 iPod touch,这将返回 @"4"。对于非视网膜 iPhone,它将返回 @"3"和 iPod touch。

【讨论】:

  • 所以它为 iPhone 5 返回“5”,为 iPhone 4 及更低版本返回“3”?对于所有 iPad 和 Retina iPhone,“4”是什么意思?因为 iPhone 5 是视网膜不是吗?
  • no.. 它会为(iPhone5S、iPhone5、iPhone4S、iPhone4、iPod5)返回 5。并为所有 Retina iPad 返回 4..并为所有非 Retina iPhone 和 iPod 返回 3。
【解决方案2】:

我同意您应该改用自动布局的建议。但以你硬编码的帧大小为例,你的代码可以写得更简单:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
    CGSize result = [[UIScreen mainScreen].bounds;
    myTableView.frame = CGRectMake(0.0, 44.0, 320.0, 200.0+(result.height - 480.0));
}

当然,这是一个完全基于现有屏幕高度 480 和 568 的假设(这些以点为单位,而不是像素)。所以不能保证通过这种方式简化你的代码,任何未来的屏幕尺寸都会给你正确的行为。您可以实现的最佳行为是使用自动布局来控制 tableView 的位置和大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多