如何在UITextView(Xcode 16)中动态调整字体大小?

问题描述 投票:0回答:1

我在使用 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

iPhone SE3 simulator

iPhone 16 Pro Max simulator

非常感谢您的帮助!

我查看了论坛,但很多解决方案都是旧的且不适用。我认为我应该使用 TextView 来显示更大的文本块,而不是 UILabel。 我尝试了诸如自动调整字体、比较内容高度与视图高度、调整以适合、缩放选项、根据设备缩放等操作。

我在这里找到了类似的东西https://stackoverflow.com/questions/35550192/how-to-dynamically-resize-text-size-in-a-uitextview-on-iphone-4s-swift,但是,它旋转围绕同样的事情 - 我应该只使用 UILabel 还是坚持滚动?

swift xcode fonts uitextview
1个回答
0
投票

我对此问题添加了评论,其中包含一些有关动态类型的资源的链接。我在以下要点中使用该方法复制了您的 UI,以便您可以看到它可能是什么样子。 要点

您可能希望根据用户设备的尺寸类别实现不同的 UI,或实现现有 UI 的差异。确保事物在各种设备上看起来正确是应用程序开发的 UI 方面的重要组成部分。

您可能需要考虑从服务中获取简化 HTML 形式的同意协议文本。如果这样做,您可以使用 HTML 创建 NSAttributedString。 HTML 可以将文本样式设置为蓝色,并且我认为您仍然可以从要点中使用动态类型方法设置字体(我没有验证这一点)。如果您要获取同意协议的 HTML,您将能够更改文本,而无需重新编译您的应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.