我有一个UITableViewController
,它显示自定义类型的NSArray的属性。在纵向方向时,我想要显示三个标签(像列一样)但在横向时我可以更多地放在UITableViewCell
上,我想要显示5个标签。
目前,我正在故事板编辑器中的原型单元格上布置我的肖像单元格,方法是将UILabels
放在UITableViewCell
上并对其进行标记,以便我可以访问子视图并设置文本cellForRowAtIndexPath
方法。我开始沿着这条路走下去,以便轻松使用我的标签的自动布局。
我发现很多建议可以在方向更改时重新调整/移动单元格上的项目,但不能更改可见的子视图数量。我正在考虑尝试使用两个不同的单元格标识符(一个具有更多横向模式标签)并根据[UIDevice currentDevice].orientation
选择我想要的标识符。我想还需要在旋转时强制重新加载单元格。
有更简单/更好的方法吗?
答案 0 :(得分:2)
你走在正确的轨道上。只需使用唯一标识符开发2个不同的原型,根据当前方向在cellForRowAtIndexPath中提供它们。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {
LatestNewsCell *cell = (LatestNewsCell *)[tableView dequeueReusableCellWithIdentifier:@"portraitCell" forIndexPath:indexPath];
// configure cell
return cell;
} else {
LatestNewsCell *cell = (LatestNewsCell *)[tableView dequeueReusableCellWithIdentifier:@"landscapeCell" forIndexPath:indexPath];
// configure cell
return cell;
}
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
[self.tableView reloadData];
}
如果单元格中包含更多标签,您只需为这些标签创建其他IBOutlet,并将现有标签重复用于两个方向中使用的标签。
编辑:在方向更改时重新加载表格。
答案 1 :(得分:1)
您可以交换整个数据源并委托,甚至可以更换方向更改的整个视图。根据您需要配置的数量,这可以使您的代码更清洁。 Apple有一个很好的指南: https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/RespondingtoDeviceOrientationChanges.html#//apple_ref/doc/uid/TP40007457-CH7-SW14
答案 2 :(得分:0)
另一个选项是UICollectionViewController。 UIkit中的表是针对一个列创建的,而collectionView则针对更复杂的布局,就像您想要实现的那样。