gpt4 book ai didi

ios - 设置其父 View 将移动的元素的 accessibilityFrame

转载 作者:可可西里 更新时间:2023-11-01 06:12:06 25 4
gpt4 key购买 nike

我有一个带有自定义 header 的 UITableView(即我自己创建 UIView)。我需要调整 View 的一个 subview 的 accessibilityFrame,但我不知道如何适本地设置框架的坐标——它们需要相对于窗口,但我不确定如何完成那个。

我的代码看起来像

- (UIView *)tableView:(UITableView *)tableView
viewForHeaderInSection:(NSInteger) section
{
CGRect bounds = CGRectMake(0, 0, [tableView frame].size.width, 48);
UIView *header = [[UIView alloc] initWithFrame:bounds];

UILabel *labelOne = [[UILabel alloc] initWithFrame:
CGRectMake(0, 0, bounds.size.width - 80, 18)];
UILabel *labelTwo = [[UILabel alloc] initWithFrame:
CGRectMake(0, 20, bounds.size.width - 80, 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];

但同样的事情发生了。后一段代码不应该将 UILabel 的框架转换为窗口相对坐标吗?

我认为问题可能在于创建 UIView 时,它不知道它将在屏幕上的什么位置(并且作为 UITableView 的一部分,它可能会在整个地方滚动)。是否有必要将 accessibilityFrame 实现为每次调用时检查 UIView 位置的消息?

最佳答案

有一个辅助函数可以帮助您做到这一点:UIAccessibilityConvertFrameToScreenCoordinates .此函数采用 CGRect 并将其从 View 的坐标系转换为屏幕坐标。

关于ios - 设置其父 View 将移动的元素的 accessibilityFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9752887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com