我需要根据容器尺寸动态设置多行标签的字体大小。整个文本应均匀地放入容器中。如果文本很短,字体应该更大,如果长 - 更小。另外,我想设置允许的最大和最小字体大小以及允许的最大行数。这意味着如果文本太长并且无法使用给定的最小字体大小和最大行数进入容器,则应使用省略号截断。
我设法在iOS上实现了这一目标,但在Android上无法实现相同目标。
以下是iOS代码:
function setTextForLabelIOS( label: any, maxFontSize: number, minFontSize: number, maxLines: number ) {
let numLines: number = 1
const font = label.font // UIFont
const textSize = NSString.stringWithString( label.text ).sizeWithAttributes( <any>{ [ NSFontAttributeName ]: font } )
const textWidth = Math.ceil( nsUtils.layout.toDevicePixels( textSize.width ) )
const textHeight = Math.ceil( nsUtils.layout.toDevicePixels( textSize.height ) )
while ( ( ( textWidth / numLines ) / ( textHeight * numLines ) > labelContainerWidth / labelContainerHeight )
&& numLines < maxLines ) {
numLines += 1
}
label.adjustsFontSizeToFitWidth = true
label.numberOfLines = numLines
label.minimumScaleFactor = minFontSize / maxFontSize
}
(iOS解决方案基于https://stackoverflow.com/a/44103978/3595434)