IPadデバイスで実行している場合、iOS 7で静的UITableViewCellsの背景色を変更できません。これは、次のセットアップで簡単に確認できます。
次に、iPhoneおよびiPadシミュレーター(iOS 7)でアプリを実行します。
IPhoneシミュレーターでは、すべて問題ありません。
iPadシミュレーターでは、すべてのセルが白色になります。
Interface Builderでセルのランタイムプロパティを設定することにより、iPadを強制的に正しく動作させようとしました。
backgroundColor
は色をクリアしますcontentView.backgroundColor
は色をクリアしますbackgroundView
からnilしかし、何も助けません。実際、contentView.backgroundColor
の実行時プロパティを設定するとセルの色が変わりますが、クリアカラーでは機能しません(つまり、背後に別のビューが白で表示されます)。
同じバージョンのiOS上の2つのデバイスが異なる結果を生成することは非常に奇妙です。他の誰かがこのバグを確認できますか?
誰かがこの問題の解決策を持っていますか、または唯一の方法は動的プロパティを使用し、cellForRowAtIndexPath
に色を設定することですか?問題の性質は静的であるため、静的セルを使用したいと思います。
追伸backgroundView.backgroundColor
ランタイムプロパティをクリアな色に設定しようとするのを忘れたことに気付いたのですが、現時点ではMacにアクセスできません。たぶんそれでうまくいくでしょう。
これを行う:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
UIImage *pattern = [UIImage imageNamed:@"image.png"];
[cell setBackgroundColor:[UIColor colorWithPatternImage:pattern]];
}
IOS7で私のために働く
Appleのドキュメント によると:
定義済みのセルを使用する場合でも、カスタムセルを使用する場合でも、
backgroundView
プロパティを使用するか、継承されたbackgroundColor
プロパティを変更することにより、セルの背景を変更できます。 iOS 7では、デフォルトでセルの背景が白になります。 iOSの以前のバージョンでは、セルは囲んでいるテーブルビューの背景色を継承します。セルの背景色を変更する場合は、Table View DelegateのtableView:willDisplayCell:forRowAtIndexPath:
メソッドで変更します。
したがって、tableView:cellForRowAtIndexPath:
でどの色を設定しても、iOS 7は後でそれを白に変更します。 tableView:willDisplayCell:forRowAtIndexPath:
に設定するだけです。私のために完璧に働いた。
代わりにContentViewの背景色を変更すると、機能します。
セルの背景色をオーバーライドするはるかに簡単な方法があります。 UITableViewCellをサブクラス化し、静的テーブルビューセルのクラスとして設定します。次にオーバーライドします:
-(void) willMoveToSuperview:(UIView *)newSuperview {
self.backgroundColor = [UIColor ...];
}
ここで、[UIColor ...] =必要な色(例:[UIColor clearColor]など);
この問題を修正できる唯一の方法は、ストーリーボードを使用する代わりにプログラムでテーブルを作成することでした。参考のために、ソリューションを投稿します。誰にも役立つことを願っています。
Uitableviewcontrollerをuiviewcontrollerに置き換えました。
次にこれを追加しました:
ヘッダーファイル
#import <UIKit/UIKit.h>
@interface LtHomeViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
{
NSArray *mFiles;
NSArray *mPics;
}
@end
そしてモジュールファイル
#import "LtHomeViewController.h"
#import "LtHomeToolbar.h"
#import "LtHomeCustomCell.h"
@interface LtHomeViewController () <LtHomeToolbarDelegate>
@end
@implementation LtHomeViewController
{
LtHomeToolbar *mainToolbar;
UITableView *theListView;
}
#define TOOLBAR_HEIGHT 64.0f
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
CGRect toolbarRect = self.view.bounds; // View controller's view bounds
toolbarRect.size.height = TOOLBAR_HEIGHT;
mainToolbar = [[LtHomeToolbar alloc] initWithFrame:toolbarRect]; // At top
mainToolbar.delegate = self;
[self.view addSubview:mainToolbar];
//
mFiles = [[NSArray alloc] initWithObjects:@"../Lumina.app/lumina0.pdf", @"../Lumina.app/lumina8.pdf", @"../Lumina.app/lumina9.pdf", @"../Lumina.app/lumina10.pdf", nil];
mPics = [[NSArray alloc] initWithObjects:@"vol0.jpg", @"vol8.jpg", @"vol9.jpg", @"vol10.jpg", nil];
//
CGRect tableViewFrame = self.view.bounds;
tableViewFrame.Origin.y = TOOLBAR_HEIGHT;
tableViewFrame.size.height = self.view.bounds.size.height - TOOLBAR_HEIGHT;
theListView = [[UITableView alloc] initWithFrame:tableViewFrame style:UITableViewStylePlain];
theListView.delegate = self;
theListView.dataSource = self;
theListView.backgroundColor = [UIColor colorWithRed:(116/255.0) green:(167/255.0) blue:(179/255.0) alpha:1.0];
[self.view addSubview:theListView];
}
#pragma mark - UITableViewDataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)theTableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)theTableView numberOfRowsInSection:(NSInteger)section
{
return [mFiles count];
}
- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"HomeCell";
// Similar to UITableViewCell, but
LtHomeCustomCell *cell = (LtHomeCustomCell *)[theTableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[LtHomeCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
cell.image.image = [UIImage imageNamed:[mPics objectAtIndex:indexPath.row]];
NSString *magName = [[mFiles objectAtIndex:indexPath.row]stringByReplacingOccurrencesOfString:@"../Lumina.app/" withString:@""];
magName = [magName stringByReplacingOccurrencesOfString:@"lumina" withString:@""];
magName = [magName stringByReplacingOccurrencesOfString:@".pdf" withString:@""];
magName = [[@"Triathlon LUMINA " stringByAppendingString:magName]stringByAppendingString:@"号"];
cell.descriptionLabel.text = magName;
return cell;
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.backgroundColor = [UIColor colorWithRed:(116/255.0) green:(167/255.0) blue:(179/255.0) alpha:1.0];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 110;
}
#pragma mark - UITableViewDelegate
- (void)tableView:(UITableView *)theTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
}
@end
今、この行だけがあなたに役立つかどうかはわかりませんが、より多くのものが必要なので、手動でテーブルを作成するアプローチを取りました
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.backgroundColor = [UIColor colorWithRed:(116/255.0) green:(167/255.0) blue:(179/255.0) alpha:1.0];
}
デビッド
この行を書くだけです
[cell setBackgroundColor:[UIColor clearColor]];
returnステートメントの前の関数内
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
IOS7のドキュメントでは、各テーブルセルのデフォルトの色は白であると明確に述べられているためです。したがって、変更する場合は、コードから変更する必要があります。 [ユーティリティ]> [属性インスペクター](右側)から、tableviewの色をクリアするように背景プロパティを設定することを忘れないでください。
それが役立つことを願っています...それが私のために働いたように...!