很长一段时间潜伏 - 第一次海报!
我在重建UITextView
像WhatsApp这样的酒吧时遇到了问题.
我正在使用自定义UIView
子类,并懒惰地实例化它:
- (UIView *)inputAccessoryView
并返回YES:
- (BOOL)canBecomeFirstResponder
现在,我想改变的大小inputAccessoryView
时,UITextView
在规模的增长.在iOS 7上,我只是改变所述视图框架的大小 - 而不是它的原点 - 然后调用reloadInputViews
它会起作用:视图将向上移动,使其在键盘上方完全可见.
但是,在iOS 8上,这不起作用.使其工作的唯一方法是还将帧的原点更改为负值.这样会很好,除了它会产生一些奇怪的错误:例如,UIView
在输入任何文本时返回到"原始"框架.
有什么我想念的吗?我非常肯定WhatsApp使用它inputAccessoryView
是因为它们在拖动时解除键盘的方式 - 仅在最新版本的应用程序中.
如果你能帮助我,请告诉我!或者,如果有任何测试,您希望我运行!
谢谢!:)
顺便说一下,这是我用来更新自定义UIView高度的代码composeBar
:
// ComposeBar frame size
CGRect frame = self.composeBar.frame;
frame.size.height += heightDifference;
frame.origin.y -= heightDifference;
self.composeBar.frame = frame;
[self.composeBar.textView reloadInputViews]; // Tried with this
[self reloadInputViews]; // and this
Run Code Online (Sandbox Code Playgroud)
编辑:完整源代码可在@ https://github.com/manuelmenzella/SocketChat-iOS获得
我有一个消息传递应用程序,它具有全屏表格视图底部的文本字段的典型UI设计.我将该文本字段设置为视图控制器inputAccessoryView
并调用ViewController.becomeFirstResponder()
以使字段显示在屏幕底部.
我知道这是Apple推荐的实现这种UI结构的方法,它在"经典"设备上运行得很好但是当我在iPhone X模拟器上测试时,我注意到使用这种方法,文本字段不尊重新的"安全区域" .文本字段显示在主屏幕指示器下方屏幕的最底部.
我查看了HIG文档,但没有找到任何关于inputAccessoryView
视图控制器的有用信息.
这很难,因为使用这种方法我实际上并没有直接控制任何约束,我只是设置inputAccessoryView
并让视图控制器从那里处理UI.所以我不能仅仅把这个领域限制在新的安全区域.
有没有人在这方面找到了很好的文档,或者知道在iPhone X上运行良好的替代方法?
当我更改inputAccessoryView
iOS 8中的高度时,inputAccessoryView不会转到右侧原点,而是覆盖键盘.
以下是一些代码段:
- (UIView *)inputAccessoryView {
if (!_commentInputView) {
_commentInputView = [[CommentInputView alloc] initWithFrame:CGRectMake(0, 0, [self width], 41)];
[_commentInputView setPlaceholder:NSLocalizedString(@"Comment", nil) andButtonTitle:NSLocalizedString(@"Send", nil)];
[_commentInputView setBackgroundColor:[UIColor whiteColor]];
_commentInputView.hidden = YES;
_commentInputView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin;
}
return _commentInputView;
}
Run Code Online (Sandbox Code Playgroud)
#when the textview change height
- (void)growingTextView:(HPGrowingTextView *)growingTextView willChangeHeight:(float)height {
if (height > _textView_height) {
[self setHeight:(CGRectGetHeight(self.frame) + height - _textView_height)];
[self reloadInputViews];
}
}
Run Code Online (Sandbox Code Playgroud)
- (void)setHeight: (CGFloat)heigth {
CGRect frame = self.frame;
frame.size.height …
Run Code Online (Sandbox Code Playgroud) 我已经实现了自定义输入附件视图,它工作正常,直到iOS 10.3.1.但它在iOS 11测试版中不可见.
有没有人遇到过这个问题?
当我在ios8崩溃中运行时,我在选择器上方创建了一个带有两个按钮的工具栏并在ios7上工作:
终止应用程序2到未捕获的异常'UIViewControllerHierarchyInconsistency',原因:'子视图控制器:应该有父视图控制器:但是请求的父级是:'
这是在ios7中安静工作的代码段:
expiredPromoTextField.inputView = DatePicker;
expiredPromoTextField.delegate = self;
quantityPromoTextField.inputView = quantityPicker;
quantityPromoTextField.delegate = self;
// Create button to close the UIPickerView
UIToolbar * mypickerToolbar = [[UIToolbar alloc] initWithFrame: CGRectMake (0, 0, 320, 56)];
mypickerToolbar.barStyle = UIBarStyleBlackTranslucent;
[mypickerToolbar sizeToFit];
NSMutableArray * barItems = [[NSMutableArray alloc] init];
UIBarButtonItem * CancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemCancel target: self action:selector (cancelDoneClicked)];
[barItems addObject: CancelBtn];
UIBarButtonItem * FLEXspace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemFlexibleSpace target: self action: nil];
[barItems addObject: FLEXspace];
UIBarButtonItem * doneBtn = …
Run Code Online (Sandbox Code Playgroud) 我已经花了好几天没有解决方案了.
我有inputAccessoryView
一个UIView
包含一个textView
和两个按钮.该行为符合inputAccessoryView
预期,除了一个以外在所有情况下都能正常工作.
当textView的高度增加时,我试图增加inputAccessoryView
相同数量的高度.当我重新定义的高度inputAccessoryView
中textViewDidChange
,该inputAccessoryView
增加的高度向下在键盘上,而不是向上.
我从SO那里尝试了许多不同的建议,但没有任何效果.我想这是自动添加NSLayoutConstraint
的,inputAccessoryView
但我不知道如何在swift和iOS 8.3中更改该值.
func textViewDidChange(textView: UITextView) {
var contentSize = messageTextView.sizeThatFits(CGSizeMake(messageTextView.frame.size.width, CGFloat.max))
inputAccessoryView.frame.size.height = contentSize.height + 16
}
Run Code Online (Sandbox Code Playgroud)
加入
inputAccessoryView.setTranslatesAutoresizingMaskIntoConstraints(true)
Run Code Online (Sandbox Code Playgroud)
到上面的代码帮助和inputAccessoryView高度正确向上增加但是我得到无法同时满足几个约束的约束,并且很难识别违规者.另外,我得到了textView在新行的每个第二个实例上创建额外空间的奇怪效果.
谢谢.
ios autoresizingmask nslayoutconstraint inputaccessoryview swift
基本上我试图在inputAccessoryView属性中创建一个调整大小的UITextView.
我有一个viewController,方法canBecomeFirstResponder返回true,一个视图我通过自定义类(从XIB获取)实例化.在这个视图中是一个UITextView.
我尝试从该类的内部调整完整的inputAccessoryView.我尝试了几个方面:直接设置框架,尝试使用高度约束.它似乎只调整了一半:
这基本上就是我想要的(有或没有自动布局,但在iOS 7/8 +中工作):
class MessageInputAccessory: UIView, UITextViewDelegate
{
@IBOutlet weak var textView: UITextView!
func textViewDidChange(textView: UITextView)
{
var contentSize = textView.sizeThatFits(CGSizeMake(textView.frame.size.width, CGFloat.max))
self.frame.size.height = contentSize.height + 20
self.textView.reloadInputViews()
}
}
Run Code Online (Sandbox Code Playgroud)
我发现这篇文章:在iOS 8中更改inputAccessoryView的框架.声明正在创建自动创建的约束.问题是,它不会为我创造约束.禁止或启用autolayout(也通过setTranslatesAutoresizingMaskIntoConstraints()).
我遇到了很多布局约束错误,所以我创建了一个新项目,并且只有一个 UIToolbar 和一个 UITextField 来尝试解决问题。即使有一个干净的项目,即使我没有覆盖.inputAccessoryView
.
代码如下(无storyboard内容):
import UIKit
class ViewController: UIViewController {
var aTextField = UITextField()
override func viewDidLoad() {
super.viewDidLoad()
let aKeyboardToolBar = UIToolbar()
// add buttons to the toolbar
let prevButton = UIBarButtonItem(title: "PREV", style: .done, target: self, action: #selector(prevButtonTapped))
let nextButton = UIBarButtonItem(title: "NEXT", style: .done, target: self, action: #selector(nextButtonTapped))
let doneButton = UIBarButtonItem(title: "DONE", style: .done, target: self, action: #selector(doneButtonTapped))
let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)
aKeyboardToolBar.setItems([prevButton, nextButton, flexibleSpace, doneButton], animated: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试找出在标签栏上放置自定义inputAccessoryView的最佳方法.目前,我有一个inputAccessoryView,它位于屏幕的最底部,但它覆盖了标签栏.任何人都知道将inputAccessoryView移位的最佳做法?
目前,我在带有标签栏的故事板中定义了一个视图.其对应的视图控制器获取视图并调用becomeFirstResponder.我已经覆盖了两个: - (UIView*)inputAccessoryView和 - (BOOL)canBecomeFirstResponder在视图的.m中
我用input accessory view
我的viewController
在屏幕的底部停靠视图,并在键盘坚持.
一切正常,除了显示一个alert
,input accessory view
隐藏.它再次被揭露解雇了alert
.这导致不期望的故障.
我尝试使用[alertView show]
API和新alertController
API.两种情况都存在问题.我需要得到支持iOS7.0
.
请提供您宝贵的意见或解决此问题的方法.
ios ×8
objective-c ×3
swift ×3
ios8 ×2
autolayout ×1
iphone ×1
iphone-x ×1
keyboard ×1
uialertview ×1
uipickerview ×1
uitabbar ×1
uitextfield ×1
uitoolbar ×1