vertically align text in a CATextLayer?

后端 未结 15 1336
时光说笑
时光说笑 2020-12-10 10:41

I am working on a CATextLayer that I want to use in both Mac and iOS. Can I control the vertical alignment of the text within the layer?

In this particular case, I

15条回答
  •  攒了一身酷
    2020-12-10 11:02

    There is nothing stopping you from creating a CALayer hierarchy with a generic CALayer (container) that has the CATextLayer as a sublayer.

    Instead of calculating font sizes for the CATextLayer, simply calculate the offset of the CATextLayer inside the CALayer so that it is vertically centred. If you set the alignment mode of the text layer to centred and make the width of the text layer the same as the enclosing container it also centres horizontally.

    let container = CALayer()
    let textLayer = CATextLayer()
    
    // create the layer hierarchy
    view.layer.addSublayer(container)
    container.addSublayer(textLayer)
    
    // Setup the frame for your container
    ...
    
    
    // Calculate the offset of the text layer so that it is centred
    let hOffset = (container.frame.size.height - textLayer.frame.size.height) * 0.5
    
    textLayer.frame = CGRect(x:0.0, y: hOffset, width: ..., height: ...)
    

    The sublayer frame is relative to its parent, so the calculation is fairly straightforward. No need to care at this point about font sizes. That's handled by your code dealing with the CATextLayer, not in the layout code.

提交回复
热议问题