以编程方式更改集合视图单元格中的标签字体

时间:2017-11-01 08:48:37

标签: ios swift xcode swift3 uicollectionview

我有一个CollectionViewController如下

class CollectionViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource{

  var dogs = ["Dog1", "Dog2","Dog3"]

@IBOutlet weak var collectionView: UICollectionView!

  override func viewDidLoad() {
        super.viewDidLoad()
        collectionView.delegate = self
        collectionView.dataSource = self
    }
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

   let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomCell", for: indexPath) as! CustomCell
    cell.testLabel.text = dogs[indexPath.row]

    return cell
}

CustomCell如下

class CustomCell: UICollectionViewCell {

    @IBOutlet weak var testLabel: UILabel!
}

我喜欢将字体大小更改为上面的18,但是我得到了我在手册中设置的字体。那么我是否可以在controller中以编程方式更改字体,或者我需要在CustomCell中更改字体

P.S。刚发现这种情况发生了,当我在可用的设备尺寸上手动设置字体时,如果我删除那些手动设备尺寸,它就可以工作。无论如何我可以覆盖它并同时拥有两个?

6 个答案:

答案 0 :(得分:1)

直接将“cellForItemAt”方法更改为

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

   let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomCell", for: indexPath) as! CustomCell
    cell.testLabel.text = ["Dog1", "Dog2", "Dog3"]

    cell.testLabel.font = UIFont(name: "HelveticaNeue", size: 18)

    return cell
}

答案 1 :(得分:1)

使用此代码可以帮助您

label.font = label.font.fontWithSize(20) //20 is font size

斯威夫特3:

label.font = label.font.withSize(20)

或尝试

UIFont.systemFont(ofSize: 18)

答案 2 :(得分:1)

使用 awakeFromNib 方法,来自apple documentation

  

nib加载基础结构向每个基础结构发送awakeFromNib消息   从nib存档重新创建的对象,但仅在所有对象之后   存档已加载并初始化。当一个对象收到   一个awakeFromNib消息,它保证有所有的插座和   行动关系已经建立。

您可以在此方法中更改标签字体。

class CustomCell: UICollectionViewCell {
    @IBOutlet weak var testLabel: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        testLabel.font = UIFont(name: "HelveticaNeue", size: 18)
    }
}

答案 3 :(得分:1)

您需要将 cellForItemAt 更改为:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

      let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomCell", for: indexPath) as! CustomCell

      cell.testLabel.text = "Dog 1"
      cell.testLabel.font = UIFont(name: "HelveticaNeue", size: 18)

      return cell
}

然后请检查以下内容:

  1. 您在故事板中正确设置了重用标识符。
  2. 您的collectionView委托已设置。
  3. 您的collectionView数据源已设置。
  4. 标签的插座已连接。
  5. 您重新加载collectionView数据
  6. 检查字体名称是否正确,您可以使用Mac上的FontBook来检查拼写。

答案 4 :(得分:1)

这是我的问题。 它的解决方案非常简单 我们要做的就是首先使用正确的字体字符串名称指定字体,然后添加字符串 即cell.testLabel.font = UIFont(name: "HelveticaNeue", size: 18) cell.testLabel.text = dogs[indexPath.row]

答案 5 :(得分:0)

首先,我不明白你为什么要在func viewDidLayoutSubviews() cellForItemAt方法中写delegate。只需从那里删除它。

其次,您不需要在collectionView.reloadData()中致电viewDidLoad(),因为它会自动第一次加载collectionView您提供的数据。

在继续更改字体之前,请检查系统中是否提供了所需的字体(HelveticaNeue)。如果没有先安装字体并将其添加到项目中。

现在要更改font的{​​{1}}。它可以通过两种方式完成:

1。label中使用awakeFromNib(),即

CustomCell

当从笔尖加载单元格时,这将仅设置单元格的字体一次。如果在配置一次后class CustomCell: UICollectionViewCell { @IBOutlet weak var testLabel: UILabel! override func awakeFromNib() { super.awakeFromNib() self.testLabel.font = UIFont(name: "HelveticaNeue", size: 18) } } 中没有进一步的更改,则建议

2。label's font中配置字体,即

cellForItemAt

这将在每次调用func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomCell", for: indexPath) as! CustomCell cell.testLabel.text = dogs[indexPath.row] cell.testLabel.font = UIFont(name: "HelveticaNeue", size: 18) return cell } 方法时设置单元格的字体,即每次重新加载单元格时。如果要在重新加载时在单元格中进行任何条件更改,请使用此选项。