Ich habe eine UITableView mit einem benutzerdefinierten Header (dh ich erstelle die UIView selbst). Ich muss den accessibilityFrame eines der Unterviews der Ansicht anpassen, aber ich kann nicht herausfinden, wie ich die Koordinaten des Rahmens angemessen setzen kann - sie müssen relativ zum Fenster sein, aber ich weiß nicht, wie ich das erreichen soll.
Mein Code sieht wie folgt aus
- (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;
}
Ich habe zwei UILabels, die ich für die Zwecke von VoiceOver kombinieren möchte. Dies erreiche ich, indem ich das zweite Label ignorieren und den Rahmen des ersten Labels erweitern, um den Bereich des zweiten Labels abzudecken. (Das zweite Label befindet sich direkt unter dem ersten.) Das Problem ist das Erhalten der Rahmen. Wenn ich den Code wie oben gezeigt verwende, ist der Zugriffsrahmen die richtige Größe, wird jedoch so positioniert, als ob der Header der UITableView in der linken oberen Ecke des Bildschirms wäre. Ich habe versucht, den Code zu ändern, um zu sagen
CGRect frameOne = [header convertRect:[labelOne frame] toView:nil];
CGRect frameTwo = [header convertRect:[labelTwo frame] toView:nil];
aber dasselbe ist passiert. Sollte dieses letztere Stück Code nicht die Rahmen der UILabels in fensterbezogene Koordinaten umwandeln?
Ich dachte vielleicht, das Problem ist, dass die UIView beim Erstellen nicht weiß, wo sie auf dem Bildschirm positioniert wird (und als Teil einer UITableView kann sie überall hin gescrollt werden). Ist es notwendig, accessibilityFrame als eine Nachricht zu implementieren, die die Position der UIView jedes Mal überprüft, wenn sie aufgerufen wird?