【问题标题】:Swift growing UITextView using autolayout使用自动布局快速增长 UITextView
【发布时间】:2015-03-24 11:14:14
【问题描述】:

我想自动调整 UITextView 的大小,类似于 sms-app 或 whatsapp。我只找到了objective-c的解决方案,示例项目的代码太多。我在 Swift 中需要这个。

问:当用户输入带有换行符的消息时,如何根据字体大小调整 UITextView 的大小?

【问题讨论】:

    标签: swift xcode6 uitextview uitextviewdelegate


    【解决方案1】:

    您可以使用 UITextViewDelegate 来做到这一点。我不知道如何使用 AutoLayout 来实现这一点。

    func textViewDidChange(textView: UITextView)
        {
            var fixedWidth : CGFloat = textView.frame.size.width
            var newSize : CGSize = textView.sizeThatFits(CGSizeMake(fixedWidth, CGFloat(MAXFLOAT)))
            var newFrame : CGRect = textView.frame
            newFrame.size = CGSizeMake(CGFloat(fmaxf((Float)(newSize.width), (Float)(fixedWidth))),newSize.height)
    
            textView.frame = newFrame
        }
    

    【讨论】:

    • 谢谢阿尔文。使用自动布局,这不起作用。我找到了一个使用自动布局的 Objective-C 库。将此导入我的 Swift 项目解决了我的问题。该库在github上:github.com/MatejBalantic/MBAutoGrowingTextView
    【解决方案2】:
    var textStorage: NSTextStorage!
    var layoutManager: NSLayoutManager!
    var textContainer: NSTextContainer!
    var textPreview: UITextView!
    
     override func viewDidLoad() {
        super.viewDidLoad()
    
        textStorage = NSTextStorage()
        layoutManager = NSLayoutManager()
        textStorage.addLayoutManager(layoutManager)
    
        let newTextViewRect = view.bounds
        let containerSize = CGSize(width: newTextViewRect.width, height: CGFloat.max + 5)
    
        textContainer = NSTextContainer(size: containerSize)
        layoutManager.addTextContainer(textContainer)
    
        textPreview = UITextView(frame: newTextViewRect, textContainer: textContainer)
        textPreview.font = UIFont(name: "Helvetica", size: 16)
        view.addSubview(textPreview)
    
        configureView()
    
        let length = count(textPreview.text)
        let range:NSRange = NSMakeRange(length , 1)
        textPreview.scrollRangeToVisible(range)
    
    }
    
    override func viewDidLayoutSubviews() {
        textPreview.frame = view.bounds
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-09
      • 2014-05-25
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多