UITableViewControllerに背景ビューを設定する方法はありますか?
UIViewController
で使用しているコードを試してみましたが、ビューはテーブルビューのすべてのコンテンツをカバーしています。 cellForRowAtIndexPath-method
に背景ビューを追加すると、まったく表示されません。誰もこれを以前にやったことがありますか、それをどのように行うことができるかについてアイデアを持っていますか?私が使用しているコードは次のとおりです。
UIImage *image = [UIImage imageNamed: @"background.jpg"];
UIImageView *backImage = [[UIImageView alloc] initWithImage: image];
[self.view addSubview: backImage];
[self.view sendSubviewToBack: backImage];
(これは基本的に上記のHans Espenのソリューションと同じですが、簡潔にするために便利な方法を使用しています)
これをあなたの-[UITableViewControllerSubclass viewDidLoad]
方法:
self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"BackgroundPattern.png"]];
ViewDidLoadメソッドでは、まれにしか呼び出されないため(ビューが実際にロードされるとき)、パフォーマンスへの影響は無視できるため、viewDidLoadメソッドでの自動リリースを回避する意味はありません。
N.B. iPhoneでは、JPEGやその他の形式ではなく、常にPNG画像を使用する必要があります。
私はそれが長い時間だったことを知っていますが、記録のためだけに.. UITableView.backgroundView
:
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"lisbon.png"]];
self.tableView.backgroundView = imageView;
[imageView release];
IPhoneで320x480の画像サイズで試しましたが、完璧に動作します(.jpgでも試しました)。
実際に、私はそれを機能させました! :)
NSString *backgroundPath = [[NSBundle mainBundle] pathForResource:@"background" ofType:@"jpg"];
UIImage *backgroundImage = [UIImage imageWithContentsOfFile:backgroundPath];
UIColor *backgroundColor = [[UIColor alloc] initWithPatternImage:backgroundImage];
self.tableView.backgroundColor = backgroundColor;
[backgroundColor release];
Swiftを使用する場合、
self.tableView.backgroundView = UIImageView(image: UIImage(named: "backgroundImage.png"))
C#で、使用可能なセクションを含む静的UITableViewControllerの場合:
using System;
using Foundation;
using UIKit;
using CoreGraphics;
using CoreAnimation;
namespace MyNamespace
{
public class CustomTableViewController : UITableViewController
{
public override void ViewDidLoad()
{
base.ViewDidLoad();
SetGradientBackgound();
}
private void SetGradientBackgound()
{
CGColor[] colors = new CGColor[] {
UIColor.Purple.CGColor,
UIColor.Red.CGColor,
};
CAGradientLayer gradientLayer = new CAGradientLayer();
gradientLayer.Frame = this.View.Bounds;
gradientLayer.Colors = colors;
gradientLayer.StartPoint = new CGPoint(0.0, 0.0);
gradientLayer.EndPoint = new CGPoint(1.0, 1.0);
UIView bgView = new UIView()
{
Frame = this.View.Frame
};
bgView.Layer.InsertSublayer(gradientLayer, 0);
UITableView view = (UITableView)this.View;
view.BackgroundColor = UIColor.Clear;
view.BackgroundView = bgView;
}
// Setting cells background transparent
public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
var cell = base.GetCell(tableView, indexPath);
cell.BackgroundColor = UIColor.Clear;
return cell;
}
// Setting sections background transparent
public override void WillDisplayHeaderView(UITableView tableView, UIView headerView, nint section)
{
if (headerView.GetType() == typeof(UITableViewHeaderFooterView))
{
UITableViewHeaderFooterView hView = (UITableViewHeaderFooterView)headerView;
hView.ContentView.BackgroundColor = UIColor.Clear;
hView.BackgroundView.BackgroundColor = UIColor.Clear;
}
}
}
}
結果は次のようになります。
self.parentViewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"yourImage.png"]];