iOS Swift - CGSizeFromString throws CGSizeZero

2019-08-21 10:47发布

问题:

I have this function which is used to set size from String length. Something like that - Swift iOS - Tag collection view.

First item in categoriesItems is "Age"

func collectionView(collectionView: UICollectionView,
    layout collectionViewLayout: UICollectionViewLayout,
    sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

        var cellWidth : CGSize = CGSizeFromString(self.categoriesItems[indexPath.row].name);

        return cellWidth
}

回答1:

To determine the width of text use the following code

let text = self.categoriesItems[indexPath.row].name
let rect = text.boundingRectWithSize(constraintSize, options: NSStringDrawingOptions.UsesFontLeading, attributes: [NSFontAttributeName : UIFont.systemFontOfSize(17)], context: nil)
return rect.size.width

where constraintSize is some arbitrary size in which you wish to constraint your text



回答2:

You can use NSStrings sizeWithAttributes function to do this. Then you cast it as it as a CGSize. This size is the size of the text, so if you want there to be padding around it, just add a value to the width and height of the size:

let string: NSString = self.categoriesItems[indexPath.row].name
let size: CGSize = string.sizeWithAttributes(nil) // Enter font/size attributes here
return size