gpt4 book ai didi

ios - 如何根据用户操作更改 iOS 7 中 UIView (UITextView) 的大小

转载 作者:行者123 更新时间:2023-11-29 03:06:20 25 4
gpt4 key购买 nike

我有一个我在 iOS 6 中编写的 iPhone 应用程序(六件事),它有一个屏幕,用户可以在其中将文本输入到 UITextView 中。当显示键盘时,UITextView 的大小会自动缩短,以便在用户键入时,光标不会隐藏在键盘后面(参见图片)。

enter image description here

我使用了以下处理程序来执行此操作:

显示键盘时:

- (void)keyboardDidShow:(id)sender
{
NSDictionary* info = [sender userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
_txtSizeBase = self._txtInfo.frame;
float offset = kbSize.height < kbSize.width?kbSize.height:kbSize.width;
_txtSizeKeyboard = CGRectMake(_txtSizeBase.origin.x, _txtSizeBase.origin.y, _txtSizeBase.size.width, _txtSizeBase.size.height-offset+60);
self._txtInfo.frame = _txtSizeKeyboard;
...
}

当按下“完成”按钮并且键盘关闭时:

- (void)keyboardDidHide:(id)sender
{
self._txtInfo.frame = _txtSizeBase;
...
}

这在 iOS 6 中运行良好。但在 iOS 7 中,我不知道有什么方法可以强制 View 在 AFTER 调用 viewDidLoad 后更改其大小。更改框架的大小不会导致其调整大小。

我已经关闭了这个表单的自动布局,这样我就可以让屏幕为 iOS 6/7(在界面构建器中使用增量)正确调整元素(y 位置)。

任何有用的建议将不胜感激。

---------------------- 使用解决方案进行编辑 ---------------- --------------

因为这个问题的解决方案有点棘手,我认为发布它会有所帮助。

  1. 我为 IOS6 添加了第二个 .xib 文件(我仅针对 IOS 6+ 发布),关闭了自动布局并根据需要调整了位置。然后我执行以下操作:

    -(id)initWithNibName:(NSString *)nibNameOrNil bundle :(NSBundle *)nibBundleOrNil{ if(![DeviceInfo isIOSAfter70]) { self = [ super initWithNibName:@"CreateRecordViewControllerIOS6" bundle :nibBundleOrNil]; } 别的 { self = [ super initWithNibName:nibNameOrNil 捆绑:nibBundleOrNil]; }

** 这不是最优雅的解决方案,但它有效,我只是想支持 IOS 6 用户,而不是继续使用 IOS 6 开发人员,所以它就是这样。 **

  1. 我为表单启用了自动布局:

enter image description here

  1. 我在 TextView 上设置了底部约束,并将其绑定(bind)到名为 _bottomConstraint 的 IBOutlet。

  2. 我修改了 KeyboardDidShow/Hide 的处理程序,如下所示:

-(void)keyboardDidHide:(id)发送者{... 如果([DeviceInfo isIOSAfter70]) {//iOS7+ 如果(_bottomConstraint!=无) { _bottomConstraint.constant = _bottomConstraintConstant; [self.viewlayoutIfNeeded]; } }...

-(void)keyboardDidShow:(id)发送者{... if([设备信息 isIOSAfter70]) {//iOS7+ if(_bottomConstraint != nil) { _bottomConstraintConstant = _bottomConstraint.constant; _bottomConstraint.constant += kbSize.height; [self.viewlayoutIfNeeded]; } }...

最佳答案

我在 iOS7 下的设置框架中遇到了类似的问题。我认为与自动约束作斗争不是很明智。只需启用自动约束(如果可以)和动画约束。您可以使用 Interface builder 从约束创建 IBOutlet,或者如果您正在以编程方式创建约束,请保留对它的引用。比使用类似这样的代码:

[self.view layoutIfNeeded];
self.constrainVertical.constant = 10;
[UIView animateWithDuration:0.3 animations:^{
[self.view layoutIfNeeded];
} completion:^(BOOL finished) {
//put some finalizing code here if needed
}];

我只移动一个约束,只是为了向您展示它是如何完成的。此外,在使用约束时,忘记直接设置框架。

希望对您有所帮助。

关于ios - 如何根据用户操作更改 iOS 7 中 UIView (UITextView) 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22737376/

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