自动调整子类 UITableViewCell 子视图的大小

Posted

技术标签:

【中文标题】自动调整子类 UITableViewCell 子视图的大小【英文标题】:Autoresizing subclassed UITableViewCell subviews 【发布时间】:2010-04-27 15:23:01 【问题描述】:

我对 UITableViewCell 进行了子类化,并通过 layoutSubviews 方法合并了一些子视图。所有视图都在 initWithStyle 方法中分配和初始化,框架在 layoutSubviews 方法中设置,如下所示:

initWithStyle:... 
UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectZero];
myLabel.someProperties = Configured;
[self.contentView addSubview:myLabel];

layoutSubviews 
CGRect labelRect = CGRectMake(10.0f, 5.0f, 35.0f, 180.0f);
myLabel.frame = labelRect;

在 viewController 中将 shouldAutoRotateOrientation 设置为 YES 会适当地旋转 NavigationController、tableView 和 UIToolbar,但 tableViewCells 的内容不会移动。就 AutoResizingMasks 而言,我不清楚在哪里或添加什么。到目前为止我尝试过的组合没有做任何事情。有人可以帮帮我吗?

谢谢!

【问题讨论】:

旋转设备时是否调用 layoutSubviews? 我不确定。我得试试 NSLog 看看。 【参考方案1】:

我想出的答案是在 layoutSubviews 方法中使用条件编码根据方向放置视图框架

-(void)layoutSubviews 
    //For portrait mode (NOT PORTRAIT UPSIDE DOWN)
    if ( UIDeviceOrientationIsPortrait([[UIDevice currentDevice]orientation]) ) 
        CGRect portraitFrame = CGRectMake(Portrait Frame Coordinates);
        myLabel.frame = portraitFrame;
     else 
    //For landscape modes
        CGRect landscapeFrame = CGRectMake(landscape frame coordinates);
        myLabel.frame = landscapeFrame;
    

似乎被破解了,但它可以在子类 UITableViewCells 中工作

【讨论】:

以上是关于自动调整子类 UITableViewCell 子视图的大小的主要内容,如果未能解决你的问题,请参考以下文章

如何动态调整 UITableViewCell 内的两个文本标签宽度?

具有自动布局约束的 UITableViewCell 子类大小不正确

UITableViewCell 子类布局在禁用自动布局的故事板中搞砸了

在 UITableViewCell 中自动调整 UITextField 的大小

如何更新 UITableViewCell 约束常量并更新单元格高度

UITableViewCell 子类,错误的高度直到滚动