50

有没有办法在 UITableViewController 上设置背景视图?

我尝试使用我在 a 上使用的代码UIViewController,但视图覆盖​​了表视图的所有内容。如果我在 中添加背景视图cellForRowAtIndexPath-method,它根本不会显示。有没有人这样做过或知道如何做到这一点?这是我正在使用的代码:

UIImage *image = [UIImage imageNamed: @"background.jpg"];
UIImageView *backImage = [[UIImageView alloc] initWithImage: image];
[self.view addSubview: backImage];
[self.view sendSubviewToBack: backImage];
4

6 回答 6

72

我知道这已经很长时间了,但只是为了记录..我想我找到了一个更好的解决方案UITableView.backgroundView

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"lisbon.png"]];

self.tableView.backgroundView = imageView;
[imageView release];

我在 iPhone 上尝试了 320x480 的图像尺寸,效果很好(我也尝试过 .jpg)。

于 2012-02-29T16:46:33.333 回答
68

(这与上面 Hans Espen 的解决方案基本相同,但为简洁起见使用了方便的方法)

把它放在你的 -[UITableViewControllerSubclass viewDidLoad]方法中:

self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"BackgroundPattern.png"]];

在 viewDidLoad 方法中避免几次自动释放是没有意义的,因为它很少被调用(当视图实际加载时),因此对性能的影响可以忽略不计。

注意:您应该始终在 iPhone 上使用 PNG 图像,而不是 JPEG 或任何其他格式。

于 2010-03-17T02:38:22.827 回答
6

事实上,我得到了它的工作!:)

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];
于 2009-05-22T15:10:52.287 回答
5

对于Swift使用这个,

self.tableView.backgroundView = UIImageView(image: UIImage(named: "backgroundImage.png"))
于 2014-12-29T06:51:51.223 回答
0
self.parentViewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"yourImage.png"]];
于 2011-09-29T09:02:46.243 回答
0

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;
            }
        }

    }
}

结果可能是这样的:

设置 TableViewController 分级背景

于 2018-01-23T05:07:06.967 回答