UITextView 的动态角半径

Posted

技术标签:

【中文标题】UITextView 的动态角半径【英文标题】:Dynamic corner radius for a UITextView 【发布时间】:2017-05-26 22:34:39 【问题描述】:

我正在尝试根据显示的行数使我的 uitextview 的角半径动态化。文本是从我的后端检索的,所以行数会有所不同......

在使用框架创建文本视图后,我尝试在 viewDidLoad 中设置角半径,但由于某种原因不起作用。由于某种原因,我假设它返回 0。

非常感谢任何帮助。

(为了简单起见,我剪掉了很多代码。所有内容都已正确添加到子视图中。所有内容均以编程方式添加 - 此处根本不使用情节提要。文本视图在角落之外按预期显示半径)

viewDidLoad 内部:

    questionOneTextBox.layer.cornerRadius = self.questionOneTextBox.frame.height * 0.5
    questionTwoTextBox.layer.cornerRadius = self.questionTwoTextBox.frame.height * 0.5

【问题讨论】:

您是说以编程方式添加UITextField,而不是使用情节提要? 【参考方案1】:

如果您使用约束以编程方式创建文本视图,则需要调用self.questionOneTextBox.layoutIfNeeded()self.questionTwoTextBox.layoutIfNeeded()。这将初始化边界。

class ViewController: UIViewController 

    var textView: UITextView!

    override func viewDidLoad() 
        super.viewDidLoad()

        // Create the Text View

        self.textView = UITextView()

        self.textView.text = "This text will appear in the text view."

        self.textView.backgroundColor = .lightGray

        self.view.addSubview(self.textView)

        // Set the constraints

        self.textView.translatesAutoresizingMaskIntoConstraints = false

        self.textView.widthAnchor.constraint(equalToConstant: 280).isActive = true

        self.textView.heightAnchor.constraint(equalToConstant: 60).isActive = true

        self.textView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 60).isActive = true

        self.textView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true

        // This will initialise the bounds

        self.textView.layoutIfNeeded()

        // Now the this should work

        self.textView.layer.cornerRadius = self.textView.frame.height * 0.5
    

这就是这段代码的样子。

【讨论】:

【参考方案2】:

在调用viewDidLoad 时,视图没有布局(大小)。将您的圆角半径尺寸调整到 viewDidLayoutSubviewsviewWillAppear,此时尺寸已发生。

【讨论】:

【参考方案3】:

您是否将clipsToBounds 设置为true?这可能会导致您的问题。我希望这会有所帮助

【讨论】:

我在回答时测试过,不需要它。

以上是关于UITextView 的动态角半径的主要内容,如果未能解决你的问题,请参考以下文章

CALayer内边框圆角半径

从 UITextView 中的点击获取单词

在 UITextView 编辑时移动 UIView

UILabel UITextField UITextView

当superview也获得角半径时,子视图的SwiftUI角半径会发生变化

在 Swift 中的 UITextView 上放置阴影