【发布时间】:2013-10-25 16:19:33
【问题描述】:
我调用了一个方法来计算我在自定义UITableViewCell 子类中拥有的一堆标签的大小,该子类位于UIPopoverController 中。当用户旋转设备时,我需要重新计算尺寸,然后重新绘制表格以使用新尺寸。我尝试检测旋转的每种方法要么被贬值,要么没有被调用,或者没有在正确的时间被调用。是否有一种方法可以在设备旋转时自动调用,我可以重新计算我的尺寸?
编辑:我尝试了什么以及为什么它不起作用:
-
shouldAutorotate- 没有被调用 - 显然已经贬值了。 -
layoutSubviews- 被调用,但如果我在这里尝试[self.tableView reloadData],我会陷入无限循环 -
NSNotificationCenterUIDeviceOrientationDidChangeNotification的观察者 - 在我的控制器知道它是新尺寸之前被调用,所以我无法在这里重新计算我的尺寸 -
[self.tableView setNeedsDisplay]inlayoutSubviews- 不会提示重新绘制表格。 -
didRotateFromInterfaceOrientation- 没有被调用 - 显然已经贬值了。
编辑 2:有关我正在尝试做的事情的更多详细信息
我正在尝试模仿“行和列”样式表,并排列标签以模仿列。当我重新计算大小时,我会遍历表格的所有行,然后遍历该行中的每个“列”。我得到每列的宽度,并跟踪每列的所有行中的最大宽度。然后我操纵宽度和字体大小之间的间距来获得它,这样如果任何行在每一列中都有最宽的标签,它仍然可以在屏幕上显示。
【问题讨论】:
-
介意分享你试过哪些方法?不推荐使用 shouldAutorotate。
-
@ChrisH:我可以把它放在那里,但如果我尝试在那里
[self.tableView reloadTable];,我会陷入无限循环。 -
检查在 UIViewcontroller 中配置视图旋转设置部分以及您尝试过哪些developer.apple.com/library/ios/documentation/uikit/reference/…
-
@KunalBalani 他说他需要调整大小的标签位于自定义单元格中。
-
似乎使用正确的 autoresizingmask 或 autolayout 可以为您解决这个问题。据我所知,Apple 正试图让我们远离将旋转检测作为布局视图的一种手段。
标签: ios objective-c ios7 uipopovercontroller