无法为UICollectionView设置背景图片

7
我一直在尝试为我的应用程序添加自定义背景图像。我使用了此处介绍的方法:如何填充UIView的背景图像
这些代码在正常的UIViewController和UITableViewController中都成功了,但在UICollectionViewController中失败了。它只是全黑的。
据我所知,UITableViewController与UICollectionViewController具有类似的结构。我比较了这两个控制器的设置,在视图部分它们都是相同的。为什么代码可以在一个控制器上运行而另一个却不行?
7个回答

10

最好的实现方法是在您的CollectionView的viewDidLoad中编写代码来实现

    let bgImage = UIImageView();
    bgImage.image = UIImage(named: "bg4");
    bgImage.contentMode = .ScaleToFill


    self.collectionView?.backgroundView = bgImage

4

它正在处理UICollectionView

self.collectionView?.backgroundColor = UIColor(patternImage: UIImage(named: "image.png")!)

1

我的朋友给了我解决方法。

关键是将集合视图背景设置为透明,而不是默认值。 我将所有视图都设置为默认值,所以我认为集合视图应该与其他视图相同。

但是为什么只有集合视图的默认背景是黑色的,而其他视图的默认背景是透明的呢?这让我感到困惑。


1

尝试以下代码为Swift 4或更高版本的UICollectionView设置背景图像

1. 将此扩展添加到您的代码中,放在主类之外

extension UICollectionView {

    func setEmptyMessage(_ message: String,_ img:UIImage) {

        let image = UIImageView()
        image.contentMode = .scaleAspectFit
        image.image = img


        let messageLabel = UILabel()
        messageLabel.text = message
        messageLabel.font = UIFont.boldSystemFont(ofSize: 20)
        messageLabel.textColor = .gray
        messageLabel.numberOfLines = 0
        messageLabel.textAlignment = .center
        messageLabel.sizeToFit()

        let mainView = UIView()
        mainView.addSubview(image)
        mainView.addSubview(messageLabel)

        //Auto Layout
        image.translatesAutoresizingMaskIntoConstraints = false
        image.centerXAnchor.constraint(equalTo: mainView.centerXAnchor).isActive = true
        image.centerYAnchor.constraint(equalTo: mainView.centerYAnchor , constant: -40).isActive = true

        messageLabel.translatesAutoresizingMaskIntoConstraints = false
        messageLabel.topAnchor.constraint(equalTo: image.bottomAnchor, constant: 20).isActive = true
        messageLabel.leadingAnchor.constraint(equalTo: mainView.leadingAnchor, constant: 10).isActive = true
        messageLabel.trailingAnchor.constraint(equalTo: mainView.trailingAnchor, constant: 10).isActive = true

        self.backgroundView = mainView
    }

    func restoreBackgroundView() {
        self.backgroundView = nil
    }
}

2. 如何使用

if Data.count == 0 {
  self.collectionView.setEmptyMessage("set the message", UIImage(named: "imageName"))
} else {
  self.collectionView.restoreBackgroundView()
}

0

这将比背景颜色完美地工作。

- (void)viewDidLoad
    {
     [super viewDidLoad];    
    self.collectionView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"imageName"]];
    }

0
// Create a Programmatically UICollectionview in iOS And Set a UICollectionView Background Image


 self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
    _collectionView=[[UICollectionView alloc] initWithFrame:self.view.frame collectionViewLayout:layout];
    [_collectionView setDataSource:self];
    [_collectionView setDelegate:self];
    [_collectionView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"tiger"]]];
    [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellIdentifier"];

    [self.view addSubview:_collectionView];

0

如果你正在将背景颜色分配给self.view,请尝试将其分配给self.collectionView。


谢谢您的回复!一个朋友给了我一个解决方案。 - Clarke Xun Gong

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