【问题标题】:UITableView background ImageUITableView 背景图片
【发布时间】:2011-08-15 02:05:33
【问题描述】:

我正在尝试将 png 图像设置为我的 tableview 的背景。使用以下代码一切都很好!但仅限于 iPhone 模拟器。如果我尝试在 iPhone 设备上运行应用程序,则 tableview 的背景保持白色(或清晰)。你有没有关于我尝试设置背景颜色的方式的事情。在以下之前我一直在尝试很多方法,但都有相同的问题。

self.tableView.backgroundColor = [UIColor clearColor];
self.tableView.opaque = NO;
self.tableView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"TableViewBackground.png"]];

提前谢谢你!

【问题讨论】:

  • 这听起来像图像未复制到您的设备。 [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"TableViewBackground.png"]]; 在设备上返回什么?请把它转储到控制台。
  • 我认为 Nick 是对的,您可以在断点时使用调试器转储它,方法是键入:po [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"TableViewBackground.png"]] ;) clean/rebuild 可能会有所帮助。
  • 或者只是NSLog(@"imageView: %@", [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"TableViewBackground.png"]]);
  • 这是 NSLog 输出:2011-04-29 01:13:42.653 TestProject[573:707] imageView: > 这来自模拟器 2011-04-29 01:15:21.431 TestProject[3893:207] imageView: > 图片似乎有问题(frame = 0,0,0,0???)我也将此图片用于启动图片!

标签: iphone uitableview background background-color


【解决方案1】:

感谢@Ravin 的回答。

在 Swift 5.0 中:

    let tempImageView = UIImageView(image: UIImage(named: "justin_bieber_topless.png"))
    tempImageView.frame = self.tableView.frame
    self.tableView.backgroundView = tempImageView;

【讨论】:

    【解决方案2】:

    Objective-c 版本:

    cell.backgroundColor = [UIColor clearColor];
    

    另见: How to create a UITableViewCell with a transparent background

    【讨论】:

      【解决方案3】:
      UIImageView *imageviewTemp = [[UIImageView alloc] init];
      [(UIImageView *)imageviewTemp sd_setImageWithURL:[NSURL URLWithString:self.stringOfPassedImage]];
      [imageviewTemp setFrame:self.tableView.frame];
      self.tableView.backgroundView = imageviewTemp;
      

      【讨论】:

      • 你在哪里设置表格视图的背景图片?你没有回答问题
      • 原始问题中没有任何内容暗示必须从网络获取图像。此外,sd_setImageWithURL: 无法通过 UIKit 获得。
      【解决方案4】:

      简单的 swift 版本将是

      let tempImageView = UIImageView(image: UIImage(named: "yourImage"))
      tempImageView.frame = self.tableView.frame
      self.tableView.backgroundView = tempImageView;
      

      【讨论】:

      • 这是在静态表格视图上工作还是只在动态单元格上工作?因为我尝试在静态上使用它,但它不起作用
      【解决方案5】:

      一个 IBDesignable 表格视图子类,可让您从界面构建器附加图像

      import UIKit
      
      @IBDesignable
      class DesignableTableView: UITableView {
      
          @IBInspectable var backgroundImage: UIImage? {
              didSet {
                  if let image = backgroundImage {
                      let backgroundImage = UIImageView(image: image)
                      backgroundImage.contentMode = UIViewContentMode.ScaleToFill 
                      backgroundImage.clipsToBounds = false
                      self.backgroundView = backgroundImage
                  }
              }
          }
      
      }
      

      【讨论】:

        【解决方案6】:
        [TableView setBackgroundView:nil];
        [TableView setBackgroundView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"apple.png"]] ];
        

        【讨论】:

          【解决方案7】:

          有点晚了,但也许对于所有其他正在寻找解决方案的人来说。我可以通过在UITableViewControllerviewDidLoad 方法中使用以下代码来完成这项工作:

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

          我花了一段时间才弄明白,但现在它就像一个魅力。

          【讨论】:

            【解决方案8】:

            如果您想为背景使用图案图像,这也可以很好地工作。

            UIImage *image = [UIImage imageNamed:@"something.png"];
            self.tableView.backgroundView = nil;
            self.view.backgroundColor = [UIColor colorWithPatternImage:image];
            

            【讨论】:

              【解决方案9】:
               UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"TableViewBackground.png"]];
              [tempImageView setFrame:self.tableView.frame]; 
              
              self.tableView.backgroundView = tempImageView;
               [tempImageView release];
              

              这很完美。感谢 Jona 的 Ravin

              【讨论】:

                【解决方案10】:

                我认为这种方法更干净:

                UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"TableBackground.jpg"]];
                self.tableView.backgroundColor = background;
                [background release];
                

                【讨论】:

                • 你知道如何让它固定在它的位置,这样它就不会随着桌子滚动吗?并使图像从顶部开始“X”像素?
                • 这会导致 uitableview 和 scrollview 的性能问题
                • 在视网膜设备上使用此解决方案会导致图像拉伸。只是需要注意的事情。
                【解决方案11】:

                您的图像实际上是否命名为TableViewBackground.PNG(注意大写)?您需要在 iOS 设备上完全匹配大小写,而在模拟器中不需要完全匹配。

                【讨论】:

                  【解决方案12】:

                  请使用以下代码。

                  UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"TableViewBackground.png"]];
                  [tempImageView setFrame:self.tableView.frame]; 
                  
                  self.tableView.backgroundView = tempImageView;
                  [tempImageView release];
                  

                  谢谢,

                  【讨论】:

                  • 这让我很烦很长时间了。非常感谢! :)
                  • 这比更改 backgroundColor 更好,因为它不会在表格滚动或弹跳时重复背景。
                  • 将图像视图设置为框架实际上很糟糕,因为您正在获取表格视图的原点,它可能不为零,而图像视图可能应该始终为零原点
                  • 使用bounds 代替[tempImageView setFrame:self.tableView.bounds];
                  • 我看到了我的背景片刻,但随后背景被单元格的内容所取代。我该怎么办?
                  猜你喜欢
                  • 2010-10-03
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-07-25
                  • 1970-01-01
                  • 2013-08-16
                  • 1970-01-01
                  • 2019-03-24
                  相关资源
                  最近更新 更多