6

これは私に髪を引っ張らせます。テキストと詳細を含む UITableViewCellStyleSubtitle スタイルのテーブルを作成しようとしています。しかし、詳細は表示されません。通常、これは誰かがセルを正しいスタイルで初期化するのを忘れたことが原因ですが、この場合はそうではありません。UITableViewCellStyleValue2 を使用すると、テキスト ラベルは右に移動しますが、4 つのセル スタイルすべてを試しましたが、詳細は表示されません。

以前に何度もテーブルを作成しました。この場合に考えられる唯一の大きな違いは、UITableViewController を使用していないことです。代わりに、他のビューと同じように UITableView を埋め込み、独自のデータ ソースとデリゲートを接続します。

私はこれに重要な方法を煮詰めました:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // Get the UITableViewCell (out of the recycling pool, or de novo)
    NSString *reuseID = @"CELL";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseID];
    if (not cell) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:reuseID] autorelease];
    }

    cell.textLabel.text = @"Foo";
    cell.detailTextLabel.text = @"Bar";
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.detailTextLabel.frame = CGRectMake(10, 20, 200,22);        // required
    cell.detailTextLabel.font = [UIFont boldSystemFontOfSize:12];   // also required
    //[cell setNeedsLayout];  (makes no difference)
    return cell;
}

上記の「必要な」行の両方を含める場合にのみ詳細テキストを表示できます (そして、デフォルト以外のセル スタイルを使用します)。その場合でも、テキスト ラベルの位置は詳細ラベルの位置と完全に重なります。 .

そのため、初期化子が detailTextLabel UILabel を作成しているように見えますが、フォント サイズをゼロに設定し、フレームを空またはオフスクリーンに設定しています。(デバッガーでこれらを調べてみましたが、あまり役に立ちません。フォント サイズがゼロで、textLabel と detailTextLabel の両方のフレームが空ですが、textLabel は常に正常に表示されます。)

明らかに、ラベルのサイズとフォントを手動で調整することで、必要に応じて回避できます。しかし、この場合、通常はスタイルとテキストを設定するだけでレイアウトが自動である場合に、そうしなければならないことは非常に気になります。Google とスタック オーバーフローを検索しましたが、同様の問題への参照が見つかりません。ここで何が起こっているのか誰にも分かりませんか?

(iOS 6.1 でのテスト)

4

5 に答える 5

16

これらすべてを試した後、ストーリーボードでテーブルビューのセルスタイルを「字幕」に設定すると、字幕が表示されましたIB ストーリーボード セル設定

于 2013-09-16T17:23:44.330 に答える
8

標準UITableViewCellクラスを登録するUITableViewCellと、このコードが実行されないため、スタイル付き sを使用できなくなる可能性があります。

if (cell == nil) { 
    // Cell will never be nil if a class/nib is registered
}

解決策: ペン先を登録ClassしていますUITableViewか? 次のような行がある場合は、削除してみてください。

[self.tableView registerClass:[UITableViewCell class] 
       forCellReuseIdentifier:"cellReuseID"];

次のように、dequeue ステートメントを更新します。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:"cellReuseID"];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 
                                  reuseIdentifier:"cellReuseID"];
}
于 2015-12-08T16:05:43.350 に答える
3

OK、このアプリには非常に異常なビルド プロセスがあることが判明しました。これは、アプリがビルドされた SDK を Cocoa フレームワークに対して正しく識別していませんでした。

その結果、Cocoa は、detailTextLabel が追加される前の、iOS4 より前の非常に古いアプリであると考えました。そのため、フレームワークは、iOS4 以前の動作をエミュレートすることで (detailTextLabel をいくつかの方法で非表示にすることで) 役立つようにしようとしていました。_UIApplicationLinkedOnOrAfter にブレークポイントを設定し、強制的に 1 を返すようにすることで、この機能を回避し、それが原因であることを証明することができました。(そして、ビルド プロセスを修正して、正しい SDK バージョンを報告する必要があります。)

言うまでもなく、これはほとんどの人が遭遇するものではありません。しかし、とにかく後世のためにここに答えを投稿すると思いました。

于 2013-03-15T18:22:08.837 に答える
1

これが役に立てば幸いです。一度確認してください

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    } 
    cell.textLabel.text = @"Foo";
    cell.detailTextLabel.text = @"Bar";
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.textLabel.frame = CGRectMake(10, 20, 100,22);        
        return cell;
}

フォントサイズ、cell.labelsの背景色の変更などの操作は、以下のメソッドで行う必要があるすべての機能です。

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    cell.detailTextLabel.font = [UIFont boldSystemFontOfSize:10];  
    cell.textLabel.backgroundColor=[UIColor redColor];
    cell.textLabel.frame = CGRectMake(10, 20, 100,22); 
    cell.detailTextLabel.frame = CGRectMake(10, 20, 200,22); 

}

cellForRowAtIndexPath このメソッドでこれらのタイプのプロパティを変更すると、それらのプロパティが失われます。

于 2013-03-15T04:31:57.943 に答える