如何在UITableView中制作固定的背景视图?

时间:2011-12-06 15:22:18

标签: iphone uitableview view background scroll

我正在尝试在我的分组UITableView后面添加一个视图。不幸的是,每当我滚动时,背景视图也会移动。即使我使用[self.view insertSubview:backgroundView belowSubview:_tableView]或[_tableView setBackgroundView:backgroundView],也会发生这种情况。为什么这个背景视图会滚动?另外,为什么我的tableView滚动,即使我已禁用滚动?这些是相关的吗?

在app Delegate中:

    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 个答案:

答案 0 :(得分:1)

尝试

- (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属性(它是相同的)

答案 1 :(得分:1)

设置[_tableView setBackgroundColor:[UIColor clearColor]];

然后将您的背景视图放在UIVableController视图层次结构中的UITableView下。

答案 2 :(得分:1)

我不知道为什么会这样,但出于某种原因,self.view是一个UITableView而不是UIView。创建一个新的UIView并将其设置为self.view解决了这个问题。我没有使用UITableViewController,而是使用UIViewController。不知道UITableView来自哪里!

答案 3 :(得分:0)

UITableView具有backgroundView属性。

夫特:

var backgroundView: UIView?

目标-C

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

滚动tableView

时,不会移动此视图