Swift - Настройка содержимого ячейки (UILabel, UIImageView) - PullRequest
1 голос
/ 03 ноября 2019

Я хотел бы настроить свой UICollectionViewCell, но он не работает так, как мне бы хотелось, чтобы он работал.

Это мой код для первой ячейки:

class MainWishlistCell: UICollectionViewCell {
    let wishlistImage: UIImageView = {
        let v = UIImageView()
        v.translatesAutoresizingMaskIntoConstraints = false
        v.image = UIImage(named: "logoGroß")
        v.layer.cornerRadius = 3.0
        v.layer.shadowColor = UIColor.black.cgColor
        v.layer.shadowOffset = CGSize(width: 3, height: 3)
        v.layer.masksToBounds = false
        return v
    }()

    let wishlistLabel: UILabel = {
        let v = UILabel()
        v.translatesAutoresizingMaskIntoConstraints = false
        v.text = "Main Wishlist"
        v.font = UIFont(name: "Avenir Next-Bold", size: 18)
        v.textColor = .darkGray
        v.textAlignment = .center
        return v
    }()

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        commonInit()
    }

    func commonInit() -> Void {
        contentView.addSubview(wishlistImage)
        contentView.addSubview(wishlistLabel)
        // constrain view to all 4 sides
        NSLayoutConstraint.activate([
            wishlistImage.topAnchor.constraint(equalTo: contentView.topAnchor),
            wishlistImage.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
            wishlistImage.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
            wishlistImage.heightAnchor.constraint(equalToConstant:150),

            wishlistLabel.topAnchor.constraint(equalTo: wishlistImage.bottomAnchor,constant: 1),
            wishlistLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
            wishlistLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
            wishlistLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
        ])
    }
}

И это выглядит так:

enter image description here

1. Проблема - Почему метка не bold?

2. Проблема - Почему нет cornerRadius?

3. Проблема - Почему shadow не отображается (внизу + справа)?

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

Для вашей первой проблемы, как @ pigeon_39 сказал, что вы должны написать имя шрифта без пробелов.

Для второй и третьей проблем вы можете использовать это решение:

func addShadow() {
    let cornerRadius: CGFloat = 5
    self.wishlistImage.layer.shadowPath = UIBezierPath(roundedRect: self.wishlistImage.bounds, cornerRadius: cornerRadius).cgPath
    self.wishlistImage.layer.shadowRadius = cornerRadius
    self.wishlistImage.layer.shadowOffset = .zero
    self.wishlistImage.layer.shadowOpacity = 0.3
    self.wishlistImage.layer.shadowRadius = 10
    self.wishlistImage.layer.cornerRadius = cornerRadius
    self.wishlistImage.layer.shadowColor = UIColor.black.cgColor
}

Ивызывайте его после установки ограничений.

0 голосов
/ 03 ноября 2019

попробуйте

  1. Проблема: 1

v.font = UIFont(name: "AvenirNext-Bold", size: 18) // удалить пробел между Avenir и Next

Проблема: 2 & 3

Добавьте это расширение в ваш проект

extension UIImageView {

    func addShadow(offset: CGSize, color: UIColor, radius: CGFloat, opacity: Float)
    {
        layer.masksToBounds = false
        layer.shadowOffset = offset
        layer.shadowColor = color.cgColor
        layer.shadowRadius = radius
        layer.shadowOpacity = opacity
    }
}

и назовите это как

let wishlistImage: UIImageView = {
        let v = UIImageView()
        v.translatesAutoresizingMaskIntoConstraints = false
        v.image = UIImage(named: "logoGroß")
        v.layer.cornerRadius = 3.0
        v.addShadow(offset: CGSize(width: 3, height: 3), color: UIColor.black, radius: 2.0, opacity: 1.0)
        return v
    }()
...