【问题标题】:Wrong size of UITableView using autoresizingMask使用 autoresizingMask 的 UITableView 大小错误
【发布时间】:2010-12-26 21:28:51
【问题描述】:

我有一个未使用 autoresizeMask 正确调整大小的 UITableView(在 iPhone 3.0 中)。

UITableView 位于 UITabBarController 内的 UINavigationController 内的 UIViewController 内,所有这些都是以编程方式创建的。状态栏可见。

UIViewController的代码基本是:

- (void)loadView {
    UIView* rootView = [[UIView alloc] init];
    self.view = rootView;
    [rootView release]; 
}

- (void)viewDidLoad {
    [super viewDidLoad];

    // table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480-20-49-44)];
    table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)]; table.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:table];
}

这样创建时,UITableView 比可用空间稍大。如果我没记错的话,它正好比导航栏的大小大 44 像素。

但是,如果我取消注释注释行并注释下一行,则 UITableView 的大小完全正确。我更喜欢使用 autoresizingMask 而不是手动计算 UITableView 的大小。我做错了什么?

提前谢谢你!

【问题讨论】:

    标签: iphone uitableview uinavigationcontroller uitabbarcontroller autoresize


    【解决方案1】:

    自动调整大小的掩码不会帮助您调整表格视图的初始大小。表格视图是使用您提供的框架创建的。 autoresizing mask 定义了当父框架改变时,相对于父视图调整框架大小的规则。

    因此,如果我定义一个 320x100 的表格,它将保持该大小,除非我明确更改它或父视图的框架发生更改。

    根据其他视图,您可以根据父级或父级框架本身持有的其他视图进行计算。

    【讨论】:

    • 感谢您的快速回复,科林。自动调整大小的蒙版正在做某事。表格视图被创建为 320x100 大小,但它填满了整个屏幕。我可以把 100 改成 200 大小都一样。
    • 如果你不设置自动调整大小的蒙版但仍将其设置为 320x100,它不会填满整个屏幕?
    • 没错。如果没有设置自动调整大小的掩码,表格视图会根据框架调整大小。
    • 好的。然后 UITableViewController 必须调整表的大小。这个问题提供了证据,也许是一个解决方案:stackoverflow.com/questions/222956/…
    • 我没有使用 UITableViewController。我正在继承 UIViewController。
    【解决方案2】:

    问题似乎是我没有在 loadView 中设置根视图的框架。如果您定义了这样的框架,然后定义了与该框架相关的子视图的框架,那么自动调整大小掩码将根据框架调整根视图的大小正确调整子视图的大小。

    例如:

    - (void)loadView {
        UIView* rootView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
        self.view = rootView;
        [rootView release]; 
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        table = [[UITableView alloc] initWithFrame:self.view.frame]; 
        table.autoresizingMask = UIViewAutoresizingFlexibleHeight;
        [self.view addSubview:table];
    }
    

    感谢 Colin Gislason 为我指明了正确的方向。

    【讨论】:

      【解决方案3】:

      创建 UIViewController 子类来代替 UITableViewController 子类。

      插入 UITableView 实例。

      在 NIB 中只需拖放 UIView

      在上面放置现有的 UITableVIew 对象。

      通过 nib 或 viewDidLoad 方法设置 uitableview 的大小。

      通过 nib 设置引用、数据源和委托。

      现在它只需传输 UIViewController 类,并且可以根据需要更改 tableview 大小。

      【讨论】:

      • 嗨,克劳斯,我尝试使用动态内容。但它适用于静态内容...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 2012-07-24
      相关资源
      最近更新 更多