Ios 未调用自定义UiCollectionViewCell类初始化
嗨,我正在使用这段代码尝试调整文本的大小,尽管我看不到如何调整标签的大小。此外,未调用自定义类中的init方法。这是我的密码: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
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中分配文本时,会覆盖某些内容。@GerardGrundyinit?(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'根据我的记忆,这是它所需要的一切。:/设置行数。奇怪的是,标签可以在集合视图中打破这一点,因为在其他情况下,您需要指定它是否有多行。把这个写进你的答案里,我会接受的。