在 swift 中将 UILabel 添加到 UITextView
Adding UILabel to UITextView in swift
我有 textView,用户可以在其中写东西,还有 Label 来显示 textView 中的字符数。
这就是我创建 textView 和 label
的方式
var messageTextView: UITextView = {
let textView = UITextView()
return textView
}()
var messageTextViewTextCounterLabel: UILabel = {
let label = UILabel()
return label
}()
我有设置标签和 uitextview 的功能。
let guide = self.view.safeAreaLayoutGuide
messageTextView.text = "Write something..:"
messageTextView.delegate = self
self.view.addSubview(messageTextView)
messageTextView.translatesAutoresizingMaskIntoConstraints = false
messageTextView.leadingAnchor.constraint(equalTo: guide.leadingAnchor, constant: 20).isActive = true
messageTextView.trailingAnchor.constraint(equalTo: guide.trailingAnchor, constant: -20).isActive = true
messageTextView.topAnchor.constraint(equalTo: guide.topAnchor, constant: 0).isActive = true
messageTextView.bottomAnchor.constraint(equalTo: guide.bottomAnchor, constant: -20).isActive = true
messageTextViewTextCounterLabel.text = "0/800"
self.messageTextView.addSubview(messageTextViewTextCounterLabel)
messageTextViewTextCounterLabel.translatesAutoresizingMaskIntoConstraints = false
messageTextViewTextCounterLabel.trailingAnchor.constraint(equalTo: messageTextView.leadingAnchor, constant: 0).isActive = true
messageTextViewTextCounterLabel.bottomAnchor.constraint(equalTo: messageTextView.bottomAnchor, constant: 0).isActive = true
messageTextViewTextCounterLabel.heightAnchor.constraint(equalToConstant: 15).isActive = true
我将标签放置在我的 TextView 中。我希望它位于右下角,但标签出现在我的 textView 中文本的右下角。 [
如何将我的标签放在 textview 中,使其位于右下角? (不是文本的右下角)
messageTextViewTextCounterLabel.trailingAnchor.constraint(equalTo: messageTextView.leadingAnchor, constant: 0).isActive = true
应该等于messageTextView. trailingAnchor
。
import UIKit
class ViewController: UIViewController {
@IBOutlet var messageTextViewTextCounterLabel:UILabel!
@IBOutlet var messageTextField:UITextField!
@IBOutlet var messageTextView:UITextView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional
self.messageTextField.delegate = self
self.messageTextView.delegate = self
}
}
UITextField
extension ViewController:UITextFieldDelegate {
//TextField Delegate Methods
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if(textField == messageTextField){
//Check TextField Lenth
let newLength = textField.text!.count + string.count - range.length
//Bind Lenth in label 8/800
messageTextViewTextCounterLabel.text = "\(newLength)/800"
return newLength <= 800
}
return true
}
//UITextView
extension ViewController:UITextViewDelegate {
//TextField Delegate Methods
func textViewShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if(textView == messageTextView){
let newLength = textView.text!.count + text.count - range.length
messageTextViewTextCounterLabel.text = "\(newLength)/800"
return newLength <= 800
}
return true
}
您也可以通过为标签提供相同的 trailing
和 bottom
约束来解决此问题。
messageTextViewTextCounterLabel.trailingAnchor.constraint
(equalTo: guide.trailingAnchor, constant: -20).isActive = true
messageTextViewTextCounterLabel.bottomAnchor.constraint
(equalTo: guide.bottomAnchor, constant: -20).isActive = true
enter image description here
我变了
self.messageTextView.addSubview(messageTextViewTextCounterLabel)
到
self.view.addSubview(messageTextViewTextCounterLabel)
但还有其他解决方案。我们可以将其更改为 self.view.safeAreaLayoutGuide.trailingAnchor / bottomAnchor
而不是等于 messageTextView 的约束
@ilqarilyasov。解决方案:
messageTextViewTextCounterLabel.trailingAnchor.constraint
(equalTo: guide.trailingAnchor, constant: -20).isActive = true
messageTextViewTextCounterLabel.bottomAnchor.constraint
(equalTo: guide.bottomAnchor, constant: -20).isActive = true
我有 textView,用户可以在其中写东西,还有 Label 来显示 textView 中的字符数。 这就是我创建 textView 和 label
的方式 var messageTextView: UITextView = {
let textView = UITextView()
return textView
}()
var messageTextViewTextCounterLabel: UILabel = {
let label = UILabel()
return label
}()
我有设置标签和 uitextview 的功能。
let guide = self.view.safeAreaLayoutGuide
messageTextView.text = "Write something..:"
messageTextView.delegate = self
self.view.addSubview(messageTextView)
messageTextView.translatesAutoresizingMaskIntoConstraints = false
messageTextView.leadingAnchor.constraint(equalTo: guide.leadingAnchor, constant: 20).isActive = true
messageTextView.trailingAnchor.constraint(equalTo: guide.trailingAnchor, constant: -20).isActive = true
messageTextView.topAnchor.constraint(equalTo: guide.topAnchor, constant: 0).isActive = true
messageTextView.bottomAnchor.constraint(equalTo: guide.bottomAnchor, constant: -20).isActive = true
messageTextViewTextCounterLabel.text = "0/800"
self.messageTextView.addSubview(messageTextViewTextCounterLabel)
messageTextViewTextCounterLabel.translatesAutoresizingMaskIntoConstraints = false
messageTextViewTextCounterLabel.trailingAnchor.constraint(equalTo: messageTextView.leadingAnchor, constant: 0).isActive = true
messageTextViewTextCounterLabel.bottomAnchor.constraint(equalTo: messageTextView.bottomAnchor, constant: 0).isActive = true
messageTextViewTextCounterLabel.heightAnchor.constraint(equalToConstant: 15).isActive = true
我将标签放置在我的 TextView 中。我希望它位于右下角,但标签出现在我的 textView 中文本的右下角。 [
如何将我的标签放在 textview 中,使其位于右下角? (不是文本的右下角)
messageTextViewTextCounterLabel.trailingAnchor.constraint(equalTo: messageTextView.leadingAnchor, constant: 0).isActive = true
应该等于messageTextView. trailingAnchor
。
import UIKit
class ViewController: UIViewController {
@IBOutlet var messageTextViewTextCounterLabel:UILabel!
@IBOutlet var messageTextField:UITextField!
@IBOutlet var messageTextView:UITextView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional
self.messageTextField.delegate = self
self.messageTextView.delegate = self
}
}
UITextField
extension ViewController:UITextFieldDelegate {
//TextField Delegate Methods
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if(textField == messageTextField){
//Check TextField Lenth
let newLength = textField.text!.count + string.count - range.length
//Bind Lenth in label 8/800
messageTextViewTextCounterLabel.text = "\(newLength)/800"
return newLength <= 800
}
return true
}
//UITextView
extension ViewController:UITextViewDelegate {
//TextField Delegate Methods
func textViewShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if(textView == messageTextView){
let newLength = textView.text!.count + text.count - range.length
messageTextViewTextCounterLabel.text = "\(newLength)/800"
return newLength <= 800
}
return true
}
您也可以通过为标签提供相同的 trailing
和 bottom
约束来解决此问题。
messageTextViewTextCounterLabel.trailingAnchor.constraint
(equalTo: guide.trailingAnchor, constant: -20).isActive = true
messageTextViewTextCounterLabel.bottomAnchor.constraint
(equalTo: guide.bottomAnchor, constant: -20).isActive = true
enter image description here
我变了
self.messageTextView.addSubview(messageTextViewTextCounterLabel)
到
self.view.addSubview(messageTextViewTextCounterLabel)
但还有其他解决方案。我们可以将其更改为 self.view.safeAreaLayoutGuide.trailingAnchor / bottomAnchor
而不是等于 messageTextView 的约束@ilqarilyasov。解决方案:
messageTextViewTextCounterLabel.trailingAnchor.constraint
(equalTo: guide.trailingAnchor, constant: -20).isActive = true
messageTextViewTextCounterLabel.bottomAnchor.constraint
(equalTo: guide.bottomAnchor, constant: -20).isActive = true