Выровнять Xcode по центру, если другой элемент не существует - PullRequest
0 голосов
/ 04 сентября 2018

Я использую UICollectionView для отображения элементов. Моя ячейка содержит ImageView и в нижней метке. Как сделать метку в центре ячейки, когда в ImageView нет изображения? Скажем:

if ("no image in ImageView ") { 
ImageView.setActive = false
"what to do here?"

Как отцентрировать метку? Конечно, я мог бы установить ограничение value = cellHeight / 2 Но есть ли другой способ сделать это? Или я могу сделать это в редакторе Xcode?

1 Ответ

0 голосов
/ 05 сентября 2018

Попробуй это. Swift 4.1

  • Добавление контейнеров в ваш стек (внутри ячейки).
  • Добавьте ваше изображениеПросмотры и метки в контейнер. Виды
  • Скрыть один из них и запустить layoutIfNeeded() в stackView

Рабочий пример использования проекта singleView (используйте кнопку для переключения). Один и тот же код должен работать внутри ячеек для UITableView или UICollectionView.

Вам нужно будет добавить UIStackView внутри ячейки и применить top, bottom, left и right якоря

В этом примере я использую кнопку для переключения видов, вы можете использовать didSet {} в imageView, чтобы скрыть / показать containerView

import UIKit
class ViewController: UIViewController {
    var stackView: UIStackView!
    var topView: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
        topView = UIView()
        topView.backgroundColor = .yellow
        let bottomView = UIView()
        bottomView.backgroundColor = .cyan
        stackView = UIStackView(arrangedSubviews: [topView, bottomView])
        stackView.distribution = .fillEqually
        stackView.axis = .vertical
        self.view.addSubview(stackView)
        stackView.centerWithSize(size: CGSize(width: 100, height: 200))
        let imageView = UIImageView()
        imageView.image = UIImage(named: "hexagon.png")
        topView.addSubview(imageView)
        imageView.centerWithSize(size: CGSize(width: 30, height: 30))
        let label = UILabel()
        label.text = "TEXT"
        label.font = UIFont(name: "Helvetica", size: 20)
        bottomView.addSubview(label)
        label.centerWithSize(size: CGSize(width: 100, height: 100))
        addButton()
    }
    func addButton() {
        let button = UIButton(type: UIButtonType.system) as UIButton
        button.titleLabel?.font = UIFont.systemFont(ofSize: 16.0)
        button.setTitle("TOGGLE", for: .normal)
        button.addTarget(self, action: #selector(toggle), for: .touchUpInside)
        button.frame = CGRect(x: 0, y: 50, width: 100, height: 30)
        self.view.addSubview(button)
    }
    @objc func toggle(sender: UIButton) {
        topView.isHidden = topView.isHidden == true ? false : true
        stackView.layoutIfNeeded()
    }
} 
extension UIView {
   func centerWithSize(size: CGSize) {
       self.translatesAutoresizingMaskIntoConstraints = false
       self.widthAnchor.constraint(equalToConstant: size.width).isActive = true
       self.heightAnchor.constraint(equalToConstant: size.height).isActive = true
       self.centerXAnchor.constraint(equalTo: self.superview!.centerXAnchor).isActive = true
       self.centerYAnchor.constraint(equalTo: self.superview!.centerYAnchor).isActive = true
    }
}
...