0

問題を説明する前に、これはこの質問とは別の問題であることを最初に指摘しておきます。

問題

このスクリーンショットは、tableView:didSelectRowAtIndexPath:にブレークを設定して撮影されたもので、シミュレーター(画像の右端)に表示されているように、選択したセルの下部に1ピクセルの青い線があります。これは、クライアントが要求するデザインではなく、このアプリが以前どのように動作していたかでもありません。選択した場合でも、セパレーターはありません。

入手方法 最初は、対応するnib(.xib)ファイルを含むカスタムUITableViewCellクラスを使用してこのテーブルビューを設計しましたが、選択に問題はありませんでした。セパレーターは必要に応じて非表示になりました。予想通り、ビュー階層からのすべてのオーバーヘッドのためにスクロールが遅くなったので、ローレンブライターの高速スクロールソリューションを使用するようにカスタムセルを作り直しました。今ではスクロールははるかに高速ですが、私は一生の間セパレーターを取り除くことができません。

私が試したこと

上のスクリーンショットの時点で...

  • テーブルビューには、IBに「Separator[なし]」があります。
  • テーブルビューを含むUIViewControllerには、viewDidLoadに次の行があります。self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

スクリーンショットでわかるように、separatorStyleが希望どおりに設定されていることを証明するために、未使用の行をいくつか挿入しました。他のテストでは、tableViewとself.tableViewが同じブレークポイントで同等のポインターであることを確認しています。

また、tableView.separatorColorを黒とクリアに設定してみましたが、すべて同じ結果になりました。選択が行われるまで、セルは正しく表示されます。


Manjunath:セルがタッチされているかどうかに応じて、別の背景を描画するために使用しているコードは次のとおりです。スクリーンショットで違いを確認できます(アニメーション化すると微妙ではありません)。

if(self.highlighted) {
    textColor = [UIColor blackColor];
    UIImage *bg = [UIImage imageNamed:@"image-cell-background_highlighted.png"];
    [bg drawAtPoint:CGPointMake(0.0, 1.0)];
}
else {
    UIImage *bg = [UIImage imageNamed:@"image-cell-background.png"];
    [bg drawAtPoint:CGPointMake(0.0, 0.0)];
}

これは、BrichterdrawContentView:氏のABTableViewCellスーパークラスから継承されたメソッドであるUIImageCell.mで呼び出されます。

4

2 に答える 2

2

クリス、

ABTableViewCellを詳しく調べてみると、次のようになります。

- (void)setFrame:(CGRect)f
{
 [super setFrame:f];
 CGRect b = [self bounds];
 b.size.height -= 1; // leave room for the seperator line
 [contentView setFrame:b];
}

セルの高さは実際のセルより1ピクセル短いため、セルが選択されると、その1ピクセルの線が選択色の色でブリードスルーします。セパレータのように見えるかもしれませんが、実際は選択色です。

テストするには、上の線を2ピクセル以上短くして、何が起こるかを確認してください。

アップデート:

FastScrollingExampleプロジェクトにこの変更を加えることにより-rootViewController

- (void)viewDidLoad
{
 self.title = @"Fast Scrolling Example";
 self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    [super viewDidLoad];
}

とコメントアウト:

// if(self.selected)
// {
//  backgroundColor = [UIColor clearColor];
//  textColor = [UIColor whiteColor];
// }
// 

選択色が透けて見えなかった場合に何が起こるかを模倣する-drawContentViewために、次のようなスクリーンショットを取得します。

代替テキストhttp://files.me.com/mahboud/7k656q

見覚えがあります?

これをどのように回避しますか?セルを選択する必要がない場合は、セルの選択を無効にします。それ以外の場合、セルを選択する場合は、独自の選択色でペイントしたときにデフォルトの選択色が透けて見えないように、四角形を大きくする必要があります-drawConentRect

于 2010-05-13T07:05:35.150 に答える
1

これを試してください: [cell setSelectionStyle:UITableViewCellSelectionStyleNone];

 // Customize the appearance of table view cells.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    {

        static NSString *CellIdentifier = NSLocalizedString(@"Cell",@"");
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (nil == cell)
        {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
        }   
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
        return cell;
    }
于 2010-05-10T04:58:24.577 に答える