Как сделать стационарный фоновый вид в UITableView? - PullRequest
3 голосов
/ 06 декабря 2011

Я пытаюсь добавить представление позади моего сгруппированного UITableView.К сожалению, всякий раз, когда я прокручиваю, фоновое представление также перемещается.Это происходит, даже когда я использую [self.view insertSubview: backgroundView underSubview: _tableView] или [_tableView setBackgroundView: backgroundView].Почему эта прокрутка в фоновом режиме?Кроме того, почему моя прокрутка tableView, хотя я отключил прокрутку?Связаны ли они?

В приложении Делегат:

    History *historyController = [[History alloc] init];
    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:historyController];

В History.m:

- (void)viewDidLoad {

    CGRect frame = self.view.frame;
    frame.origin.x = 0;
    frame.origin.y = 0;
    _tableView = [[UITableView alloc] initWithFrame:frame style:UITableViewStyleGrouped];
    _tableView.delegate = self;
    _tableView.dataSource = self;
    [_tableView setScrollEnabled:NO];
    [_tableView setBackgroundColor:[UIColor clearColor]];
    _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

    UIView *bg = [[UIView alloc] initWithFrame:frame];
    [bg setBackgroundColor:[UIColor scrollViewTexturedBackgroundColor]];
    UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"CenterFade.png"]];
    iv.alpha = .750;
    [bg addSubview:iv];
    [iv release]; iv = nil;

    [self.view addSubview:bg];
    [self.view addSubview:_tableView];
    [bg release]; bg = nil;
    [_tableView release];

    [super viewDidLoad];
}

Ответы [ 4 ]

1 голос
/ 06 декабря 2011

комплект [_tableView setBackgroundColor:[UIColor clearColor]];

и затем поместите фоновое представление в UITableView в иерархии представлений UIViewController.

1 голос
/ 06 декабря 2011

Я не знаю, почему это происходит, но по какой-то причине self.view является UITableView, а не UIView.Создание нового UIView и установка его в self.view устранили проблему.Я не использую UITableViewController, но UIViewController.Не знаю, откуда взялся UITableView!

1 голос
/ 06 декабря 2011

Попробуйте

- (void)viewDidLoad {

    CGRect frame = self.view.frame;
    frame.origin.x = 0;
    frame.origin.y = 0;

    UIView *bg = [[UIView alloc] initWithFrame:frame];
    [bg setBackgroundColor:[UIColor scrollViewTexturedBackgroundColor]];
    UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"CenterFade.png"]];
    iv.alpha = .750;
    [bg addSubview:iv];
    [iv release];
    iv = nil;

    _tableView = [[UITableView alloc] initWithFrame:frame style:UITableViewStyleGrouped];
    _tableView.delegate = self;
    _tableView.dataSource = self;
    [_tableView setScrollEnabled:NO];
    [_tableView setBackgroundColor:[UIColor clearColor]];
    _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

    [bg addSubview:_tableView];
    [_tableView release];
    _tableView = nil;
    [self.view addSubview:bg];
    [bg release];
    bg = nil;

    [super viewDidLoad];
}

Если ваш контроллер UITableViewController, просто замените его на UIViewController<UITableViewDelegate, UITableViewDatasource> со свойством tableView (это то же самое)

0 голосов
/ 06 января 2015

UITableView имеет свойство backgroundView.

Swift:

var backgroundView: UIView?

Objective-C

@property(nonatomic, readwrite, retain) UIView *backgroundView

Это представление не будет перемещено при прокрутке таблицы ViewView

...