【问题标题】:UIViewController width change when the keyboard is displayed显示键盘时 UIViewController 宽度变化
【发布时间】:2017-07-15 10:55:34
【问题描述】:

我有一个使用其xib 文件创建的 exampleUIViewController。 mainView 包含一些 textFields。当点击textField(开始编辑)时,我会用动画显示键盘:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {

self.view.frame = self.initialFrame;

 [textField resignFirstResponder];

    [UIView animateWithDuration:0.25 animations:^
     {
         CGRect newFrame = [view frame];
         newFrame.origin.y -= PORTRAIT_KEYBOARD_HEIGHT;
         [view setFrame:newFrame];

     }completion:^(BOOL finished)
     {

     }];
 return YES;
}

然后在textFieldShouldReturn:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {

self.view.frame = self.initialFrame;
[textField resignFirstResponder];

    [UIView animateWithDuration:0.25 animations:^
     {
         CGRect newFrame = [view frame];
         newFrame.origin.y += PORTRAIT_KEYBOARD_HEIGHT;
         [view setFrame:newFrame];

     }completion:^(BOOL finished)
     {

     }];

return YES;
}

viewDidLoad 中,我将self.initialFrame 设置为:

self.intialFrame = self.view.frame;

问题是当显示键盘时,mainView 的宽度会发生变化并变大。

我做错了什么? 为什么我只有xib 有这个问题,而不是storyboard 中创建的UIViewController? 我该如何解决这个问题?

【问题讨论】:

    标签: ios objective-c uiviewcontroller keyboard xib


    【解决方案1】:

    在 viewDidLoad() 中无法获得正确的帧大小,请在 viewDidAppear() 中尝试

    【讨论】:

      【解决方案2】:

      如果您想使用 xib 或故事板 ViewController 获得正确的框架视图。不要使用

      获取视图
      - (void)viewDidLoad {
          [super viewDidLoad];
      }
      

      获得正确帧的最佳方法是

      - (void) viewDidLayoutSubviews
      {
          [super viewDidLayoutSubviews];
          self.intialFrame = self.view.frame;
      }
      

      【讨论】:

        猜你喜欢
        • 2017-06-09
        • 2019-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-18
        • 1970-01-01
        • 1970-01-01
        • 2015-05-11
        相关资源
        最近更新 更多