我有一个带有自定义标题的UITableView(即我自己创建了UIView).我需要调整视图的一个子视图的accessibilityFrame,但我无法弄清楚如何正确设置框架的坐标 – 它们需要相对于窗口,但我不知道如何完成那.
我的代码看起来像
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger) section { CGRect bounds = CGRectMake(0,[tableView frame].size.width,48); UIView *header = [[UIView alloc] initWithFrame:bounds]; UILabel *labelOne = [[UILabel alloc] initWithFrame: CGRectMake(0,bounds.size.width - 80,18)]; UILabel *labelTwo = [[UILabel alloc] initWithFrame: CGRectMake(0,20,18)]; CGRect frameOne = [labelOne frame]; CGRect frameTwo = [labelTwo frame]; [labelTwo setIsAccessibilityElement:NO]; [labelOne setAccessibilityFrame:CGRectUnion(frameOne,frameTwo)]; // ... return header; }
我有两个UILabel,我想把它合并为一个用于VoiceOver的目的.我通过忽略第二个标签并扩展第一个标签的框架以覆盖第二个标签的区域来实现这一点. (第二个标签位于第一个标签的下方.)问题在于获取帧.如果我使用上面显示的代码,可访问性框架的大小正确,但其位置就好像UITableView的标题位于屏幕的左上角.我试着修改代码说
CGRect frameOne = [header convertRect:[labelOne frame] toView:nil]; CGRect frameTwo = [header convertRect:[labelTwo frame] toView:nil];
但同样的事情发生了.后一段代码不应该将UILabels的帧转换为窗口相对坐标吗?
我想也许问题在于,当UIView被创建时,它不知道它将被放置在屏幕上的哪个位置(并且作为UITableView的一部分,它可以在整个地方滚动).是否有必要将accessibilityFrame实现为每次调用时检查UIView位置的消息?