मैंने एक नया सिंगल व्यू प्रोजेक्ट बनाया और UITableView बनाने के लिए इस कोड को जोड़ा।


- (void)viewDidLoad {
    [super viewDidLoad];
    tableView=[[UITableView alloc]init];
    tableView.frame = CGRectMake(10,30,320,400);
    tableView.dataSource=self;
    tableView.delegate=self;
    tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
    [tableView reloadData];
    [self.view addSubview:tableView];
}

- (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier   forIndexPath:indexPath] ;
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    cell.textLabel.text = @"hello";
    cell.textLabel.accessibilityIdentifier = @"world";
    return cell;
}

मेरा UI परीक्षण केवल print(app.debugDescription) के साथ दृश्य पदानुक्रम को प्रिंट करता है और जैसा कि आप देख सकते हैं कि मुख्य विंडो के ग्राफ़ में 2 पत्ती दृश्य हैं: StaticText cell.textLabel के अनुरूप और एक अज्ञात/यादृच्छिक Other देखें। मैंने यह पता लगाने के लिए कई तरीके आजमाए हैं कि यह Other दृश्य क्या है, लेकिन उत्तर मुझे नहीं सूझता।


Element subtree:
 →Application, 0x600000d98820, pid: 17292, label: 'TestApp'
    Window (Main), 0x600000d989c0, {{0.0, 0.0}, {768.0, 1024.0}}
      Other, 0x600000d98a90, {{0.0, 0.0}, {768.0, 1024.0}}
        Table, 0x600000d98b60, {{10.0, 30.0}, {320.0, 400.0}}
          Cell, 0x600000d98c30, {{10.0, 30.0}, {320.0, 44.0}}
            StaticText, 0x600000d98d00, {{25.0, 30.0}, {290.0, 43.5}}, identifier: 'world', label: 'hello'
            Other, 0x600000d98dd0, {{25.0, 73.5}, {305.0, 0.5}}

शायद यह इस UITableViewCell के अजीब/अस्पष्ट व्यवहार से अधिक है?

दूसरी विचित्रता जो मुझे इस ओर ले जाती है वह है जब एक UIScrollView जिसमें एक UILabel होता है, को UITableViewCell में जोड़ा जाता है, तो UIScrollView पदानुक्रम में प्रकट नहीं होता है। तो यह:


- (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier   forIndexPath:indexPath] ;
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    UIScrollView *sv = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
    UILabel *lb = [[UILabel alloc] initWithFrame:CGRectMake(0,0, 5,5)];
    [lb setText:@"hello world"];
    [sv addSubview:lb];
    [[cell contentView] addSubview:sv];
    return cell;
}

यह पैदा करता है:

Element subtree:
 →Application, 0x6000014e75a0, pid: 20372, label: 'TestApp'
    Window (Main), 0x6000014e7190, {{0.0, 0.0}, {768.0, 1024.0}}
      Other, 0x6000014e6ff0, {{0.0, 0.0}, {768.0, 1024.0}}
        Table, 0x6000014e6f20, {{10.0, 30.0}, {320.0, 400.0}}
          Cell, 0x6000014e6e50, {{10.0, 30.0}, {320.0, 44.0}}
            StaticText, 0x6000014e6d80, {{10.0, 30.0}, {5.0, 5.0}}, label: 'hello world'
            Other, 0x6000014e6cb0, {{25.0, 73.5}, {305.0, 0.5}}

जबकि यह (कोई टेबल या सेल शामिल नहीं है):

- (void)viewDidLoad {
    [super viewDidLoad];
    UIScrollView *sv = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
    UILabel *lb = [[UILabel alloc] initWithFrame:CGRectMake(0,0, 5,5)];
    [lb setText:@"hello world"];
    [sv addSubview:lb];
    [self.view addSubview:sv];
}

ऐसा लगता है कि ठीक काम करता है:


Element subtree:
 →Application, 0x600000278750, pid: 20442, label: 'TestApp'
    Window (Main), 0x6000002788f0, {{0.0, 0.0}, {768.0, 1024.0}}
      Other, 0x600000278820, {{0.0, 0.0}, {768.0, 1024.0}}
        ScrollView, 0x6000002789c0, {{0.0, 0.0}, {10.0, 10.0}}
          StaticText, 0x600000278a90, {{0.0, 0.0}, {5.0, 5.0}}, label: 'hello world'

मेरे विचार हैं कि यह सब किसी तरह से isAccessibilityElement, accessibilityTraits से संबंधित है और एक दृश्य एक कंटेनर है या नहीं, यह निर्धारित करता है कि क्या उजागर हो जाता है लेकिन असंगतता भयावह है और मुझे उम्मीद है कि कोई और जानता है गुप्त सूत्र।

0
marvhen 22 पद 2019, 05:03

1 उत्तर

सबसे बढ़िया उत्तर

यह अन्य तत्व कोशिकाओं के बीच पृथक्करण रेखा है। चूँकि ये रेखाएँ अन्य तत्वों को प्रभावित नहीं करती हैं, इसलिए उन्हें आपको परेशान नहीं करना चाहिए।

जब आप किसी तत्व को सुलभ बनाते हैं, तो उसके वंशज UI परीक्षण तत्वों के पेड़ में प्रकट नहीं होते हैं।

1
Roman Zakharov 10 जिंदा 2020, 11:39