Фон для просмотра таблиц остается белым

#ios #swift #uitableview

#iOS #swift #uitableview

Вопрос:

У меня проблема с эффектом параллакса. У меня есть TableView и ImageView над TableView. Теперь, когда пользователь прокручивает сверху, я хочу немного растянуть изображение. Но проблема в том, что мой TableView продолжает иметь белый фон, как вы можете видеть на скриншоте. Таким образом, изображение не видно. Снимок экрана делается при загрузке viewcontroller, а затем я просто опускаю, насколько могу. У TableView есть backgroundColor .clear, поэтому я не понимаю, почему он не работает.

Мой код:

 import UIKit
import PureLayout
class ViewController: UIViewController {

    lazy var headerImageView: UIImageView = {
        let imageView = UIImageView(forAutoLayout: ())
        imageView.image = UIImage(named: "test")
        imageView.contentMode = .scaleAspectFill
        imageView.clipsToBounds = true

        return imageView
    }()

    lazy var tableView: UITableView = {
        let tableView = UITableView(forAutoLayout: ())

        tableView.delegate = self
        tableView.dataSource = self
        tableView.separatorStyle = .none
        tableView.isOpaque = false
        tableView.backgroundColor = .clear

        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "default")
        tableView.tableFooterView = UIView()
        tableView.showsVerticalScrollIndicator = false

        return tableView
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.addSubview(self.headerImageView)

        self.headerImageView.autoPinEdge(toSuperviewEdge: .left)
        self.headerImageView.autoPinEdge(toSuperviewEdge: .right)
        self.headerImageView.autoPin(toTopLayoutGuideOf: self, withInset: 0)

        self.headerImageView.autoSetDimension(.height, toSize: 100)

        self.view.addSubview(self.tableView)
        self.tableView.autoPinEdge(toSuperviewEdge: .left)
        self.tableView.autoPinEdge(toSuperviewEdge: .right)
        self.tableView.autoPinEdge(toSuperviewEdge: .bottom)
        self.tableView.autoPinEdge(.top, to: .bottom, of: self.headerImageView)
    }
}

extension ViewController: UITableViewDelegate, UITableViewDataSource {
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 20
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "default", for: indexPath)
        cell.textLabel?.text = "test"
        cell.backgroundColor = .red

        return cell
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 50
    }
}

extension ViewController: UIScrollViewDelegate {

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        // Parallax functionality
        let yOffset = scrollView.contentOffset.y * 0.2
        let availableOffset = min(yOffset, 60)
        let contentRectYOffset = availableOffset / self.headerImageView.frame.size.height
        self.headerImageView.layer.contentsRect = CGRect(x: 0.0, y: contentRectYOffset, width: 1, height: 1)
    }
}
  

введите описание изображения здесь

Комментарии:

1. Вы пробовали добавлять view.backgroundColor = UIColor.clear в viewDidLoad ?

2. Да, и это ничего не решает.

3. Можете ли вы подтвердить, что изображение копируется на ресурсы устройства (или симулятора)?

4. Да, конечно, потому что в противном случае вы не смогли бы увидеть его на симуляторе.

5. Просто то, с чем я сталкивался в прошлом. Я мог видеть изображение на симуляторе, но не на устройстве. Я понял это, как только зарегистрировал его на консоли. Стоит попробовать, пока вы не услышите от кого-то другого.