gpt4 book ai didi

ios - 如何像whatsapp一样根据文本长度增加UITextview高度

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:34:53 26 4
gpt4 key购买 nike

我已经使用 websocket 在我的 iOS 应用程序中实现了聊天功能,它对我来说工作正常。

问题是我想增加 UITextView 的高度,而 UITableView 应该根据 UITextView 增加的高度向上移动。谁能帮帮我?

下面是我在我的应用程序中使用的代码:

- (void)viewDidAppear:(BOOL)animated
{
AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication]delegate];

[super viewDidAppear:animated];


UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
[self.messagesTextView addGestureRecognizer:tgr];

[[NSNotificationCenter defaultCenter] addObserverForName:UIKeyboardWillChangeFrameNotification object:nil queue:nil usingBlock:^(NSNotification *note) {
CGRect endFrame = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
UIViewAnimationCurve curve = [note.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue];
CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];

UIViewAnimationOptions options = curve << 16;

[UIView animateWithDuration:duration delay:0.0 options:options animations:^{

NSLog(@"frame: %@", NSStringFromCGRect(endFrame));


CGRect frame = self.txtView.frame;
if (isMsgLong==TRUE) {
frame.origin.y = self.view.frame.size.height- CGRectGetHeight(self.txtView.frame)-216;

}
else {

frame.origin.y = CGRectGetMinY(endFrame) - CGRectGetHeight(self.txtView.frame);
}
self.txtView.frame = frame;


CGRect frame1 = self.sendButton.frame;
frame1.origin.y = CGRectGetMinY(endFrame) - CGRectGetHeight(self.sendButton.frame);
self.sendButton.frame = frame1;


frame = self.messagesTextView.frame;
frame.size.height = CGRectGetMinY(self.txtView.frame) - CGRectGetMinY(frame);
self.messagesTextView.frame = frame;

NSLog(@"did appear: %@", NSStringFromCGRect(self.txtView.frame));

} completion:nil];
}];

}

- (void)keyboardWillShow:(NSNotification *)note
{

[UIView animateWithDuration:0.3 animations:^{
NSDictionary *info = note.userInfo;
NSValue *value = info[UIKeyboardFrameEndUserInfoKey];
CGRect rawFrame = [value CGRectValue];
CGRect keyboardFrame = [self.view convertRect:rawFrame fromView:nil];

NSLog(@"frame: %@", NSStringFromCGRect(self.txtView.frame));

self.txtView.transform = CGAffineTransformMakeTranslation(0, -keyboardFrame.size.height);

self.sendButton.transform = CGAffineTransformMakeTranslation(0, -keyboardFrame.size.height);
self.messagesTableView.contentInset=UIEdgeInsetsMake(0, 0,keyboardFrame.size.height,0);
//keyboardFrame.size.height

NSLog(@"frame1: %@", NSStringFromCGRect(self.txtView.frame));

isMsgLong = FALSE;

}];
}

- (void)keyboardWillHide:(NSNotification *)note
{
[UIView animateWithDuration:0.3 animations:^{

NSLog(@"frame2: %@", NSStringFromCGRect(self.txtView.frame));
self.txtView.transform = CGAffineTransformIdentity;


NSLog(@"frame3: %@", NSStringFromCGRect(self.txtView.frame));

self.sendButton.transform = CGAffineTransformIdentity;
self.messagesTableView.transform = CGAffineTransformIdentity;

isMsgLong = TRUE;
}];
}

-(void)textViewDidEndEditing:(UITextView *)textView
{
self.messagesTableView.contentInset=UIEdgeInsetsMake(0, 0, 0, 0);

self.txtView.transform = CGAffineTransformMakeTranslation(0, -216);
self.sendButton.transform = CGAffineTransformMakeTranslation(0, -216);


NSLog(@"frame5: %@", NSStringFromCGRect(self.txtView.frame));


NSInteger lastSectionIndex = [self.messagesTableView numberOfSections] - 1;
NSInteger lastRowIndex = [self.messagesTableView numberOfRowsInSection:lastSectionIndex] - 1;
if (lastRowIndex==-1) {
lastRowIndex=0;
}
NSIndexPath *pathToLastRow = [NSIndexPath indexPathForRow:lastRowIndex inSection:lastSectionIndex];

if (lastRowIndex==0) {

}
else {
[self.messagesTableView scrollToRowAtIndexPath:pathToLastRow atScrollPosition:UITableViewScrollPositionBottom animated:NO];
//UITableViewScrollPositionMiddle
}
}

最佳答案

这适用于 iOS 6.1 和 iOS 7,如果您使用的是 Objective C,则可以使用此代码:

- (void)textViewDidChange:(UITextView *)textView
{
CGFloat fixedWidth = textView.frame.size.width;
CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
CGRect newFrame = textView.frame;
newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
textView.frame = newFrame;
}

或者,如果您使用的是 Swift,请使用:

let fixedWidth = textView.frame.size.width
textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))
var newFrame = textView.frame
newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
textView.frame = newFrame;

如果您想要支持 iOS 6.1,那么您也应该这样做:

textview.scrollEnabled = NO;

关于ios - 如何像whatsapp一样根据文本长度增加UITextview高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32836240/

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