ios – 设置父视图将移动的元素的accessibilityFrame

前端之家收集整理的这篇文章主要介绍了ios – 设置父视图将移动的元素的accessibilityFrame前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有自定义标题的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位置的消息?

解决方法

有一个辅助函数可以帮助你完成这个: UIAccessibilityConvertFrameToScreenCoordinates.这个函数接受一个CGRect并将它从视图的坐标系转换为屏幕坐标.

猜你在找的iOS相关文章