iPhone - Настройка фона на UITableViewController - PullRequest
50 голосов
/ 22 мая 2009

Есть ли способ установить фоновое представление на UITableViewController?

Я пытаюсь использовать код, который я использую на UIViewController, но представление охватывает все содержимое табличного представления. Если я добавлю фоновое представление в cellForRowAtIndexPath-method, оно вообще не будет отображаться. Кто-нибудь делал это раньше или есть идеи, как это можно сделать? Вот код, который я использую:

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

Ответы [ 6 ]

72 голосов
/ 29 февраля 2012

Я знаю, что это было давно, но только для записи .. Я думаю, что нашел лучшее решение, используя UITableView.backgroundView:

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

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

Я попытался с размером изображения 320x480 на iPhone и отлично работает (я пробовал и с .jpg).

68 голосов
/ 17 марта 2010

(Это в основном то же самое, что и решение Ханса Эспена выше, но для краткости используются удобные методы)

Поместите это в ваш - [UITableViewControllerSubclass viewDidLoad] метод:

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

Нет смысла избегать пары автоматических выпусков в методе viewDidLoad, поскольку он вызывается только редко (когда представление действительно загружается) и, следовательно, будет оказывать незначительное влияние на производительность.

N.B. Вы всегда должны использовать изображения PNG на iPhone, а не JPEG или любой другой формат.

6 голосов
/ 22 мая 2009

На самом деле, я получил это работает! :)

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];
5 голосов
/ 29 декабря 2014

Для Swift используйте это,

self.tableView.backgroundView = UIImageView(image: UIImage(named: "backgroundImage.png"))
0 голосов
/ 23 января 2018

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

    }
}

Результат может быть примерно таким:

Setting TableViewController grading background

0 голосов
/ 29 сентября 2011
self.parentViewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"yourImage.png"]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...