- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经使用 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/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 5年前关闭。 Improve this qu
我在此网站页脚中使用共享按钮。除了 url http://gnr.richkid.co.il/he/catalog/a/item/?ItemID=etc 的页面之外,whatsapp 按钮在所有页面中
这张图片在 WhatsApp 中流传,是带有 alpha 信息的 PNG 图像。如果您重新共享原始文件,则仅适用于 PNG。您尝试上传 PNG 文件(此文件或任何其他文件)的所有内容都会转换为 JPG
我在 Google 上做了很多研究。有很多教程和应用程序可以做到这一点。我测试了最知名的:App2SD、Link2SD、FolderMount。我什至购买了他们的商业版,以确保我启用了所有功能。好吧,
我使用 C# 创建了一个 Win 表单应用程序。这是向输入/选定的 Excel 文件手机号码发送批量 Whats App 消息。在制作这个软件的过程中,Whatsapp屏蔽了我的两个号码,原因是发送多
我在我的服务器上设置了 Yowsup。我关注了 this guide并设置一切没有任何错误。但是在最后一步,即发送消息时,它不会引发任何错误,但消息不会到达我手机上的 Whatsapp。 以下是输出供
我正在尝试实现一个 WhatsApp 机器人,它使用 chromedriver 并打开 whatsapp 网络,并向联系人发送消息。这些是程序的步骤: 从 excel 文件中读取联系人 设置发送消息的
我将WhatsApp语音消息(WhatsApp业务云API)中的音频文件发送到Google语音到文本识别。非常奇怪的是,它适用于从Windows WhatsApp客户端发送的语音消息。因此,让官方的W
是否可以将 IBM Watson Assistant(对话)与 WhatsApp 集成?我尝试在互联网上搜索,但没有找到太多。 最佳答案 我们正在努力与 Watson IBM 集成,这将带来 amio
我不确定这在这里是否离题,但我发现了其他 WhatsApp 问题。 如果我分享包含 IP 地址的链接,例如: http://123.456.789.456/mystuff WhatsApp 只为数字(
我正在尝试获取联系人的用户名、状态和上次查看数据的转储。 由于 WhatsApp 没有 API,因此我将其安装在 BlueStacks 上,并尝试拍摄可能存储这些详细信息的数据库的快照。 我有几个问题
是否可以使用 WhatsApp 服务器向 WhatsApp 组发送消息,在我自己的应用程序中而不打开 WhatsApp 应用程序? 另外,请帮助我了解 WhatsApp 联系人聊天的历史记录。 最佳答
我正在尝试从我的应用程序中选择联系人的 Whatsapp 地址,但鉴于我的应用程序是 Whatsapp 的实用程序,我希望用户继续使用选择联系人的 native 方式,这样他们不必习惯对我们大多数人来
假设我需要用户填写的表格很少,包括联系电话。填写完所有表格后,我希望该联系电话应该收到一条消息,其中包括一些问候语或单击以在表格中使用的一些文本或图像。该消息应作为简单的 SMS 和 WhatsApp
我正在尝试构建一个后台服务,我可以在其中将消息从我的 whatsapp 发送到其他用户的 whatsapp。我试过这段代码 PackageManager packageManager = getApp
如果您能在以下方面提供帮助,我们将不胜感激。通过我们的应用程序,用户可以启动 WhatsApp 消息(发生的情况是 WhatsApp 客户端以预加载的电话 + 文本开始,因此用户只需点击 WhatsA
我为类似的问题找到了很多线索,但在任何地方我都找不到我要找的东西。 给定联系人号码和短信,我想以编程方式向该联系人发送 WhatsApp 消息,而无需打开应用程序或选择联系人。 到目前为止,我已经编写
我的要求是在 Gallery/Albums 下显示目录, 以以下方式创建目录并不能完全满足我的要求... File rootPath = new File(Environment.getExtern
我知道如何使用 WhatsApp 官方 API 向任何号码发送消息 https://api.whatsapp.com/send?phone= 但是,如果用户加入该群组,有什么方法可以向 WhatsAp
我使用这段代码,但它显示了其他应用程序。 NSURL *URL = [[NSBundle mainBundle] URLForResource:@"ABC" withExtension:@"png"]
我是一名优秀的程序员,十分优秀!