我在使用 Swift 和 Xcode 调整 UITextView 内的文本字体大小时遇到问题,这样当有人使用较小的屏幕(如 iPhone SE 3)时,文本会较小,并且应该很好地适应视图,而不需要滚动(这是我的)目前的解决方法)。对于较大的屏幕,缺点是有很多空白空间,理想情况下,此处的文本应该更大,以便更优雅地占据视图。我检查了论坛,但许多解决方案都是旧的且不适用。我认为我应该使用 TextView 来显示更大的文本块,而不是 UILabel。查看屏幕截图,这是我的 ViewController 代码:
// consent text view
consentTextView.backgroundColor = .systemGray5
consentTextView.isUserInteractionEnabled = true
consentTextView.isScrollEnabled = true
consentTextView.isEditable = false
let consentAlign = NSMutableParagraphStyle()
consentAlign.alignment = .justified
let consentAttributes = [
NSAttributedString.Key.font: UIFont(name: "AvenirNext-Regular", size: 15.0)!,
NSAttributedString.Key.foregroundColor: UIColor.black,
NSAttributedString.Key.paragraphStyle: consentAlign,
]
// consent text
let contentString = NSMutableAttributedString(string:
"The content of the app is intended for healthcare professionals only. The information contained within the app is not intended for the general public." +
"\n" +
"\nI confirm that I am a professional within the meaning of §2a of Act No. 40/1995 Coll., on advertising regulation, as amended, i.e., a person authorized to prescribe medicinal products or a person authorized to dispense medicinal products." +
"\n" +
"\nI acknowledge that the information contained herein is not intended for the general public, but for healthcare professionals, with all the risks and consequences arising therefrom for the general public." +
"\n" +
"\nAfter confirmation, you can continue using the app. We appreciate your understanding - enjoy NeoTools!"
,attributes: consentAttributes
)
// consent text specific attributes
contentString.addAttribute(.font, value: UIFont(name: "AvenirNext-Medium", size: 15.0)!, range: NSRange(location: 0, length: 68))
contentString.addAttribute(.foregroundColor, value: UIColor.handbookBlue, range: NSRange(location: 0, length: 68))
contentString.addAttribute(.font, value: UIFont(name: "AvenirNext-Medium", size: 15.0)!, range: NSRange(location: 597, length: 102))
contentString.addAttribute(.foregroundColor, value: UIColor.handbookBlue, range: NSRange(location: 597, length: 102))
// consent text append
consentTextView.attributedText = contentString
非常感谢您的帮助!
我查看了论坛,但很多解决方案都是旧的且不适用。我认为我应该使用 TextView 来显示更大的文本块,而不是 UILabel。 我尝试了诸如自动调整字体、比较内容高度与视图高度、调整以适合、缩放选项、根据设备缩放等操作。
我在这里找到了类似的东西https://stackoverflow.com/questions/35550192/how-to-dynamically-resize-text-size-in-a-uitextview-on-iphone-4s-swift,但是,它旋转围绕同样的事情 - 我应该只使用 UILabel 还是坚持滚动?
我对此问题添加了评论,其中包含一些有关动态类型的资源的链接。我在以下要点中使用该方法复制了您的 UI,以便您可以看到它可能是什么样子。 要点
您可能希望根据用户设备的尺寸类别实现不同的 UI,或实现现有 UI 的差异。确保事物在各种设备上看起来正确是应用程序开发的 UI 方面的重要组成部分。
您可能需要考虑从服务中获取简化 HTML 形式的同意协议文本。如果这样做,您可以使用 HTML 创建 NSAttributedString。 HTML 可以将文本样式设置为蓝色,并且我认为您仍然可以从要点中使用动态类型方法设置字体(我没有验证这一点)。如果您要获取同意协议的 HTML,您将能够更改文本,而无需重新编译您的应用程序。