ios - SizeToFit() 无法正常使用\n?

标签 ios swift label uilabel sizetofit

我以编程方式创建标签。它总是有两条线。不过,这两行的字体大小会改变。因此,标签的高度和宽度必须改变。我尝试使用 sizeToFit 来做到这一点。然而,第二个词(“Day”)仅部分显示。这个词的底部被切掉了。就好像 sizeToFit 无法识别文本实际上是两行。这就好像 sizeToFit 正在调整标签的大小以适合一行。我该如何解决这个问题?谢谢。

let screenWidth = UIScreen.main.bounds.width
let screenWidthHalf = screenWidth/2.0
let screenHeight = UIScreen.main.bounds.height
myLabel = UILabel()
myLabel.text = "Good \n Day"
myLabel.textAlignment = .center
let myLabelFontSize = 12.0*screenHeight/667
let myLabelFont = UIFont.systemFont(ofSize: myLabelFontSize)
myLabel.font = myLabelFont
myLabel.numberOfLines = 0
myLabel.sizeToFit()
let myLabelWidth = myLabel.frame.width
let myLabelWidthHalf = myLabelWidth/2.0
let myLabelX = screenWidthHalf - myLabelWidthHalf
let myLabelY = 142.5
myLabel.frame.origin.x = myLabelX
myLabel.frame.origin.y = myLabelY
scrollView.addSubview(myLabel)

最佳答案

我喜欢使用 Lets Build That App channel 提供的方法(查看 Facebook News Feed Dynamic Cell Content),而不是 sizeToFit。我确实使用 ScrollView 。这是我用来获取高度的典型方法。绝对会考虑字体大小、换行符以及我所能提供的任何其他内容。

基本上方法如下,当我布局 View 时,我根据每个 View 的内容计算其估计大小,然后使用这些计算来相应地更新框架。我创建了 UILabel 的扩展来简化此操作。您至少需要明确高度或宽度。通常宽度是明确的。

extension UILabel {
  func getEstimatedHeight(width: CGFloat) -> CGFloat {
    let size = CGSize(width: width, height: 1000)
    let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin)
    let estimatedFrame = NSString(string: self.text ?? "").boundingRect(with: size, options: options, attributes: [NSAttributedStringKey.font: self.font], context: nil)
    return estimatedFrame.height
  }
}

返回后,您可能还需要在高度中添加一个“捏造”因素。

 let myViewEstimatedHeight = toView.getEstimatedHeight(width: width - 100)
 myView.view.frame = CGRect(x: 20, y: 20, width: width, 
       height: myViewEstimatedHeight + 3)

关于ios - SizeToFit() 无法正常使用\n?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53687079/

相关文章:

iOS:如何在关闭需要状态栏的模态 VC 后隐藏状态栏?

swift - 检查当前 swift 4.1 中所有页面的互联网连接

swift - 在 Storyboard中更改 "View as: iPhone"时出现 UI 错误

javascript - HTML、javascript - 显示标签的输入值

java - 如何使用 Netbeans 在 JFrame 中显示文本?如何清除 JFrame 中的文本?

iOS Web View 打开多个链接经常丢失请求

ios - UICollectionView 不允许完全滚动---最后几行被切断

ios - 一次关闭两个 UIViewController 而不使用动画

适用于hidesBottomBarWhenPushed的iOS自定义动画

javascript - 中断无法在函数内使用标签时出现错误,找不到标签