Ios 未调用自定义UiCollectionViewCell类初始化

Ios 未调用自定义UiCollectionViewCell类初始化,ios,swift2,ios9,xcode7,uicollectionviewcell,Ios,Swift2,Ios9,Xcode7,Uicollectionviewcell,嗨,我正在使用这段代码尝试调整文本的大小,尽管我看不到如何调整标签的大小。此外,未调用自定义类中的init方法。这是我的密码: class Cell: UICollectionViewCell { @IBOutlet weak var label: UILabel! override init(frame: CGRect) { super.init(frame: frame) print("init—>Not being called

嗨,我正在使用这段代码尝试调整文本的大小,尽管我看不到如何调整标签的大小。此外,未调用自定义类中的init方法。这是我的密码:

class Cell: UICollectionViewCell {


    @IBOutlet weak var label: UILabel!


    override init(frame: CGRect) {
        super.init(frame: frame)
        print("init—>Not being called???\n")
        self.label.adjustsFontSizeToFitWidth = true
        self.cell.label.sizeToFit()
    }

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


}
我该怎么做才能让init这样调用。我也尝试过调整方法中的文本

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath
虽然标签的文本大小没有改变, 这是一个长字符串单元格的外观。 提前感谢你的帮助

如果我放置-

将字体大小调整为适合的宽度

大小合适

:

进入->

 required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.label.adjustsFontSizeToFitWidth = true  // causes error
        self.label.sizeToFit()
    }

我还收到一个错误。

将代码或断点放在
init?(coder-aDecoder:NSCoder)
中。如果您在故事板中添加了CollectionView,则应该调用该函数

更新 按原样处理IBOutlets(在cell子类中),因为在init函数中它们可能还无效,我假设这就是您的情况:

override func layoutSubviews() 
{
    super.layoutSubviews()
    self.label.adjustsFontSizeToFitWidth = true
    self.label.minimumScaleFactor = 0.8 //set the scale factor or minimumFontSize so that it can then start adjusting the font size.
    Self.label.numberOfLines = 1
}

init?(coder-aDecoder:NSCoder)
中放置代码或断点。如果您在故事板中添加了CollectionView,则应该调用该函数

更新 按原样处理IBOutlets(在cell子类中),因为在init函数中它们可能还无效,我假设这就是您的情况:

override func layoutSubviews() 
{
    super.layoutSubviews()
    self.label.adjustsFontSizeToFitWidth = true
    self.label.minimumScaleFactor = 0.8 //set the scale factor or minimumFontSize so that it can then start adjusting the font size.
    Self.label.numberOfLines = 1
}

您是否已尝试重写awakeFromNib()?我刚刚尝试了awakeFromNib(),虽然文本仍在调整,但仍在调用它。也许当我在cellforItemAtIndex中分配文本时,会覆盖某些内容。@GerardGrundy
init?(coder-aDecoder:NSCoder)
肯定会被调用。在那里放置一个断点或一些日志(我看你没有)。这是如果您在故事板中设置了“收藏视图”。@GerardGrundy查看“我的答案”的更新。init方法不是在self上引用属性的安全位置,尤其是IBOutlets。我记得有一个类似的问题。您是否已经尝试重写awakeFromNib()?我刚刚尝试了awakeFromNib(),虽然文本还没有调整,但仍在调用它。也许当我在cellforItemAtIndex中分配文本时,会覆盖某些内容。@GerardGrundy
init?(coder-aDecoder:NSCoder)
肯定会被调用。在那里放置一个断点或一些日志(我看你没有)。这是如果您在故事板中设置了“收藏视图”。@GerardGrundy查看“我的答案”的更新。init方法不是在self上引用属性的安全位置,尤其是IBOutlets。我记得有一个类似的问题。是的,它被调用了,但导致了一个错误。请参阅我对上述问题的编辑。@GerardGrundy,这是典型的问题。在init方法中,您的outlet可能尚未初始化,我认为这是一种懒惰的初始化。想象一下,初始化一个有数千个iboutlet的视图,然后初始化它的子视图,而不显示该视图。这将是一种内存浪费,只有在视图出现之前,您才需要初始化该视图上的属性等。好的,很好,调用此设置,但出于某种原因,它仍在两行上显示文本。我尝试了:self.label.sizeToFit(),但它只是变得很奇怪,单元格的大小也发生了变化。我只是想让文字的宽度合适。也许我需要在某个地方为文本行添加一个最大宽度。哦,对了。您需要将标签上的numberOfLines设置为1。试试看。”label.numberOfLines=1'根据我的记忆,这是它所需要的一切。:/设置行数。奇怪的是,标签可以在集合视图中打破这一点,因为在其他情况下,您需要指定它是否有多行。把它放在你的答案里,我会接受的。是的,它被调用了,但是导致了一个错误。请看我对上述问题的编辑。@GerardGrundy,这是典型的。在init方法中,您的outlet可能尚未初始化,我认为这是一种懒惰的初始化。想象一下,初始化一个有数千个iboutlet的视图,然后初始化它的子视图,而不显示该视图。这将是一种内存浪费,只有在视图出现之前,您才需要初始化该视图上的属性等。好的,很好,调用此设置,但出于某种原因,它仍在两行上显示文本。我尝试了:self.label.sizeToFit(),但它只是变得很奇怪,单元格的大小也发生了变化。我只是想让文字的宽度合适。也许我需要在某个地方为文本行添加一个最大宽度。哦,对了。您需要将标签上的numberOfLines设置为1。试试看。”label.numberOfLines=1'根据我的记忆,这是它所需要的一切。:/设置行数。奇怪的是,标签可以在集合视图中打破这一点,因为在其他情况下,您需要指定它是否有多行。把这个写进你的答案里,我会接受的。