我有一個自定義標題的UITableView(即我自己創建UIView)。我需要調整視圖的其中一個子視圖的accessibilityFrame,但我無法弄清楚如何適當地設置框架的座標 - 它們需要相對於窗口,但我不知道如何完成那。設置其父視圖將移動的元素的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;
}
我有兩個UILabels,我想結合成一個VoiceOver會的目的。我通過忽略第二個標籤並擴展第一個標籤的框架來覆蓋第二個標籤的區域來實現這一點。 (第二個標籤緊靠第一個標籤。)問題在於獲取框架。如果我使用上面顯示的代碼,那麼可訪問性框架是正確的大小,但定位好像UITableView的標題位於屏幕的左上角。我試圖修改代碼說
CGRect frameOne = [header convertRect:[labelOne frame] toView:nil];
CGRect frameTwo = [header convertRect:[labelTwo frame] toView:nil];
但發生同樣的事情。不應該這後一段代碼將UILabels的幀轉換爲窗口相對座標嗎?
我想也許問題是,當創建UIView時,它不知道它將在屏幕上的位置(作爲UITableView的一部分,它可能滾動到整個地方)。是否有必要實現accessibilityFrame作爲一個消息,每次調用UIView的位置時都會檢查它的位置?