UILabel в UICollectionView охватывает две или более ячеек - PullRequest
1 голос
/ 07 апреля 2019

Я знаю, как запрограммировать метку в ячейке (см. Ниже label2), моя проблема в том, что я хочу построить календарь, и когда, например, у меня назначена встреча на два дня, мне нужна метка, которая охватывает две ячейки (см. Изображение, этикетка 1) Есть идеи, как этого достичь?Каждая помощь более чем ценится!

enter image description here

Когда я использую следующий код, второе изображение показывает, что метка скрыта в следующей ячейке (вы можете увидеть небольшую зеленую линию междуячеек):

 let myLabel = UILabel()
    myLabel.clipsToBounds = false
    myLabel.translatesAutoresizingMaskIntoConstraints = false
    cell.addSubview(myLabel)
    myLabel.backgroundColor = UIColor.green
    myLabel.widthAnchor.constraint(equalToConstant: desiredWidth).isActive = true
    myLabel.heightAnchor.constraint(equalToConstant: 30).isActive = true
    let margins = cell.layoutMarginsGuide
    myLabel.topAnchor.constraint(equalTo: margins.topAnchor, constant: 15).isActive = true
    myLabel.text = "Appointment"

enter image description here

1 Ответ

0 голосов
/ 07 апреля 2019

Перво-наперво, сначала вы должны снять отметки с клипов для привязки к ячейке в раскадровке, или вы можете сделать это в

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
  let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
  // So that the label can go out of bound
  cell?.clipsToBounds = false
  cell?.label.clipsToBounds = false

  .
  .
  .

  return cell
} 

Теперь вы можете использовать логику с ограничением для достижения желаемого в InterfaceBuilder

Или

Вы можете изменить рамку метки в cellForItem, примерно так

// Change desiredWidth according to you needs
let desiredWidth = 1000

cell?.wordlabel.frame = CGRect(origin: (cell?.wordlabel.frame.origin)! , size: CGSize(width: desiredWidth, height: 30))

EDIT

Вы можете настроить размер своей ячейки:

extension YourViewController: UICollectionViewDelegateFlowLayout {

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    let font = UIFont.systemFont(ofSize: 13)

    let size = (data[indexPath.row] as NSString).size(withAttributes:[NSAttributedString.Key.font: font])

    // Add your logic here for the desired cell width
    let additionalpadding: CGFloat = 1000
    return CGSize(width: size.width + additionalpadding, height: 30)
}

} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...