首页 文章

UITextView仅在iPad上无法正确调整大小

提问于
浏览
7

我有一个静态UITableView,在1节中有3行 . 每行包含一个UITextView,它应根据内容调整大小 . 每个UITextView对象都禁用了滚动以强制它增长 . 每个都固定在单元格的contentView的所有4个边上,没有其他约束 .

当我在iPad(真实或SIM卡)上运行时,无论UITextView的内容如何,单元格都会调整为单行文本 . 当我在调试器中检查视图层次结构时,我看到即使内容视图高度为183.5,UITextView高度也被设置为27.5 . 这似乎是UITableViewCellContentView上的高度约束的结果,它限制了单元格高度 . 这不是我设置的约束 . 我的表视图控制器没有heightForRow或cellForRow方法,因为它是一个静态表视图,并为所有内容使用自动布局 . 我不知道如何添加这个约束 .

enter image description here

这是完全相同的层次结构,在iPod touch上运行的完全相同的点上具有完全相同的内容 . 请注意,这次UITextView高度和内容高度相同 . 在这种情况下,UITableViewCellContentView对高度的约束足够大以容纳UITextView高度 .

enter image description here

在这两种情况下,这是执行和显示相同内容的相同源 . 该内容包含带有回车符的短文本行,这就是为什么它应在两种屏幕尺寸中调整到相同内容大小的原因 . UITextView希望将其高度调整为183.5,但在iPad上,单元格高度受到iOS生成的约束的不必要限制 .

这是viewDidLoad的代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    //shrink the uiswitch a little bit
    self.displayRegexCharsSwitch.transform  = CGAffineTransformMakeScale(0.70, 0.70);

    //these next 2 lines set up the table to automatically resize based on content
    self.tableView.estimatedRowHeight = 100.0f;
    self.tableView.rowHeight = UITableViewAutomaticDimension;

    //next line hides the blank cells
    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

    //these are needed on iPad or rows with accessory view don't resize
    [self.tableView beginUpdates];
    [self.tableView endUpdates];
}

同样,由于使用静态表视图,表视图控制器中没有heightForRow或cellForRow .

我很困惑 . 如果内容相同且代码相同,为什么UITextField在iPad上报告的内容大小与iPod上的内容大小不同?从层次结构视图可以清楚地看出,UITextField内部知道它的高度为200,但contentSize返回27.5 . 这是一个静态表视图,因此没有heightForRow方法,也没有cellForRow方法 . 我依靠自动布局来管理所有布局 - 它在iPad上正确运行 .

EDIT

仅供参考 - 该设计完全基于Any / Any尺寸等级 .

enter image description here

1 回答

  • 4

    找到了!我将布局移植到一个新项目中,以将问题与项目中正在进行的其他事情隔离开来 . 新项目中没有出现布局问题 . 所以我比较了整体项目设置,我注意到新项目的部署目标是iOS 8.3,原始项目的部署目标是iOS 6.0 . 当我将新项目部署目标设置为iOS 6.0时,出现了布局问题 . iOS 7.0也是如此 . 但是,对于iOS 8.0及更高版本,问题就会消失 . 是时候强迫我的用户升级到iOS 8了 .

    enter image description here

相关问题