#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. Просто то, с чем я сталкивался в прошлом. Я мог видеть изображение на симуляторе, но не на устройстве. Я понял это, как только зарегистрировал его на консоли. Стоит попробовать, пока вы не услышите от кого-то другого.