gpt4 book ai didi

ios - textView Swift 的动态单元格高度

转载 作者:行者123 更新时间:2023-11-28 10:56:14 32 4
gpt4 key购买 nike

我以前用过标签,效果很好。但我刚刚意识到我需要一个 UITextView,但我似乎无法让它正常工作。

enter image description here enter image description here

文本一直向右移动,我再也看不到它了。我需要它来适应单元格的动态高度,就像它之前使用标签一样。

struct postStruct {
let username : String!
let message : String!
let photoURL : String!
let timeStamp: String!
let cellUserId : String!
}



class GeneralChatroom: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate {

@IBOutlet weak var messageTextField: UITextField!
@IBOutlet weak var tableView: UITableView!

var generalRoomDataArr = [postStruct]()



override func viewDidLoad() {
super.viewDidLoad()



//Key Board - self delegate for return key
messageTextField.delegate = self

//TableView Cell word wrap (Dynamic Text)
self.tableView.dataSource = self
self.tableView.delegate = self
self.tableView.estimatedRowHeight = 78
self.tableView.rowHeight = UITableViewAutomaticDimension

//Liquid Loader
let growColor = UIColor.red
let lineMatColor = UIColor(red: 11 / 255.0, green: 211 / 255.0, blue: 138 / 255.0, alpha: 1.0)
let lineMatFrame = CGRect(x: self.view.frame.width * 0.5 - 25, y: 500, width: 50, height: 50)
let lineMat = LiquidLoader(frame: lineMatFrame, effect: .Line(lineMatColor,4,1.0, growColor))

//Placement of liquid Loader
let screenSize = UIScreen.main.bounds
let screenWidth = screenSize.width
// let screenHeight = screenSize.height
lineMat.frame = CGRect(x:screenWidth - 55 , y: 20, width:20 , height: 20)
view.addSubview(lineMat)


//Start Here


let ref = FIRDatabase.database().reference()
//let userID = FIRAuth.auth()?.currentUser?.uid







ref.child("general_room").queryOrderedByKey().observe(.childAdded, with: {snapshot in

let snapDict = snapshot.value as? NSDictionary
let message = snapDict?["Message"] as? String ?? ""
let username = snapDict?["user_name"] as? String ?? ""
let userIDString = snapDict?["uid"] as? String ?? ""
let firebaseUserPhotoURL = snapDict?["photo_url"] as? String ?? ""






// print("username: " + username)
// print("message: " + message)
// print("URL: " + firebaseUserPhotoURL)
// print("Snapshot" + snapshot.key)

//Time String from Firbase Database
let timeString = snapDict?["time_stamp"] as? String ?? "2017-03-06 00:20:51"

//timeAgoSinceDate - Format and call function to recieve time of post
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let timeStampDate = dateFormatter.date(from: timeString)
let timeStamp = timeAgoSinceDate(date: timeStampDate!, numericDates: false)


//Assign array values
self.generalRoomDataArr.insert(postStruct(username: username, message: message, photoURL: firebaseUserPhotoURL, timeStamp: timeStamp, cellUserId: userIDString), at: 0)
self.tableView.reloadData()


})


//End Here


self.tableView.reloadData()



}//End ViewDidLoad





//MARK: Buttons (BackButton || Send Button)


@IBAction func backButtonPressed(_ sender: UIButton) {
self.performSegue(withIdentifier: "BackToRoom", sender: nil)
}


//Message Send button is pressed data uploaded to firebase
@IBAction func sendButtonPressed(_ sender: UIButton) {

//If a character exists will be uploaded to firebase
if ((messageTextField.text?.characters.count)! > 0) {

let message : String = self.messageTextField.text!
UploadGeneralChatRoom(message: message) //upload to general_room
self.messageTextField.text = nil
messageTextField.resignFirstResponder()//Quit keyboard

self.tableView.reloadData() //Reload tableView
//UploadUserData() //Update Rank in database

}


}




//MARK: TableView (Cell & Labels)



//Get Data of current cell that has been tapped
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

let userIdentityString = generalRoomDataArr[indexPath.row].cellUserId

print("Uid of cell Data: " + userIdentityString!)
print("section: \(indexPath.section)")
print("row: \(indexPath.row)")

//1.) If imageView touch is deteected
//2.) Segua to new view controller by passing in the string UID(userIdentityString) of the cell
//3.) Get database information based on the UID that is added(look at prevous methods)
// -might have to call this function and use separeate function
//4.) Output data from database Users to represent a user profile



//All you have to do is pass a UID (Check other Database methods to send UID)

}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return generalRoomDataArr.count // your number of cell here
}




func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


let cell = tableView.dequeueReusableCell(withIdentifier: "cell")

//Transform Data From ^ to load at the bottom
tableView.transform = CGAffineTransform (scaleX: 1,y: -1);
cell?.contentView.transform = CGAffineTransform (scaleX: 1,y: -1);
cell?.accessoryView?.transform = CGAffineTransform (scaleX: 1,y: -1);

//Set username label to display username
let usernameLabel = cell?.viewWithTag(1) as! UILabel
usernameLabel.text = generalRoomDataArr[indexPath.row].username


//Set message label to display message
// let messageLabel = cell?.viewWithTag(2) as! UILabel
// messageLabel.text = generalRoomDataArr[indexPath.row].message
// messageLabel.numberOfLines = 0

let messageLabel = cell?.viewWithTag(5) as! UITextView
messageLabel.text = generalRoomDataArr[indexPath.row].message



//initialize UI Profile Image
let imageView = cell?.viewWithTag(3) as! UIImageView

//Make Porfile Image Cirlce
imageView.layer.cornerRadius = imageView.frame.size.width/2
imageView.clipsToBounds = true

//Set timeStampLabel to current time AGO
let timeStampLabel = cell?.viewWithTag(4) as! UILabel
timeStampLabel.text = generalRoomDataArr[indexPath.row].timeStamp
timeStampLabel.numberOfLines = 0


//Loading and change of Usesrs profile image on chat cell
let userProfileChatImage = generalRoomDataArr[indexPath.row].photoURL

//Load profile image(on cell) with URL & Alamofire Library
let downloadURL = NSURL(string: userProfileChatImage!)
imageView.af_setImage(withURL: downloadURL as! URL)

return cell!
}




//MARK: KeyBoard close on return button


// Hide the keyboard when the return key pressed
func textFieldShouldReturn(_ messageTextField: UITextField) -> Bool {
messageTextField.resignFirstResponder()
return true
}




}//END CLASS

最佳答案

设置 textView 的高度并将其连接到 View Controller 作为 NSLayoutConstraints 并通过 textViewDidChange 更新它。

看下面的代码,其中textViewHeight是NSLayoutConstraints

func textViewDidChange(_ textView: UITextView) {

let fixedWidth = textView.frame.size.width
textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
var newFrame = textView.frame
newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
textView.frame = newFrame;
textViewHeight.constant = newFrame.size.height
tableView.beginUpdates()
tableView.endUpdates()
}

关于ios - textView Swift 的动态单元格高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43398867/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com