iPhone固定位置的UITableView背景

14

我正在构建一款iPhone应用程序,没有使用Interface Builder。我已经按以下方式设置了分组的UITableView的背景:

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"groupedBackground.png"]];

我正在尝试修复此背景图像,以使其不随着表单单元格滚动。有人知道如何做到这一点吗?


你对Interface Builder有什么问题? - Azeem.Butt
我花了一些时间摆弄它,但发现我想做的事情更容易只是用代码来写。我不排斥将来使用它。 - treblig
5个回答

45

我们发现,如果您不使用backgroundColor,而是像下面这样分配给backgroundView,它会正好按照您的要求工作:

self.tableView.backgroundView = [[UIImageView alloc] initWithImage:
                 [UIImage imageNamed:@"background.png"]];
的单元格会在静止的背景上滚动。(我相信自3.2版SDK以来一直都有这个功能。)

1
已确认在iOS 5.1中可正常工作。在我看来,这个答案应该被接受,因为它是一个更广泛适用的解决方案,而不是经常被宣传的在表视图后面添加子视图的方法(如果你使用的是UITableViewController,则此方法只能正常工作)。 - JK Laiho

8
您可以使用以下方法使用图案图像实现固定背景:

您可以通过使用图案图像来实现固定背景,具体如下:

UIView *patternView = [[UIView alloc] initWithFrame:tableView.frame];
patternView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"groupedBackground.png"]];
patternView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
tableView.backgroundView = patternView;

5

可能有些晚了,但也许对于其他人来说还是有用的解决方案。我可以通过在UITableViewControllerviewDidLoad方法中调用parentViewController来实现这个功能:

self.parentViewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background.png"]];
self.tableView.backgroundColor = [UIColor clearColor];

或者只使用背景颜色:

self.parentViewController.view.backgroundColor = [UIColor scrollViewTexturedBackgroundColor];
self.tableView.backgroundColor = [UIColor clearColor];

我花了一段时间才弄明白,但现在它像魔法一样工作。


1
您可以在UITableView下方放置一个额外的视图,并设置其背景,这样如果UITableView是透明的 - 您将实现您的目标 - 它将具有正确的背景并且不会滚动。

这意味着对UITableView进行Alpha混合。您是否注意到使用此方法会导致性能下降? - Frank Krueger
我在一个非常简单的案例中使用了它,因此没有看到任何降级。所以了解它的唯一方法是尝试它,这不应该花费太多时间。 - Valerii Hiora
嗯......这听起来很不错,但我仍然有一些问题。我把下面的代码放在我的UITableViewController的ViewDidLoad中:self.view.backgroundColor = [UIColor clearColor]; UIImageView *background = [[UIImageView alloc]initWithImage: [UIImage imageNamed: @"groupedBackground.png"]]; [self.view addSubview: background]; [self.view sendSubviewToBack: background];由于“background”仍然在tableView内部,它会随着其余部分一起滚动,并且单元格没有显示在背景图片的顶部。 - treblig
您可以创建一个简单的UIViewController,并将背景和表格放置在主视图中。 - Valerii Hiora
只是为了明确,这不适用于 UITableViewController,因为在 UITableViewControllerself.view == self.tableView。但是,如果您将 UITableView 添加到 UIViewController 中,则可以使用它。 - eunoia

0

使用下面的Swift 3.0代码实现UITableView的常态背景:

 self.tableView.backgroundView = UIImageView(image: UIImage(named: "background.png")!)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接