Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITableview没有';当显示键盘时,不要向上滚动_Ios_Objective C_Uitableview - Fatal编程技术网

Ios UITableview没有';当显示键盘时,不要向上滚动

Ios UITableview没有';当显示键盘时,不要向上滚动,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我有一个这样的观点: 其中,屏幕的前半部分是谷歌地图,后半部分是UITableview,标题单元格中有一个UISearchbar 当我点击搜索栏时,这种情况发生在大屏幕上,但在小屏幕上,我的uisearchbar被键盘覆盖着 如您所见,当键盘显示时,搜索栏会向底部移动一点。我不想那样。它应该将所有内容向上推,使Tableview可见 我遵循了一个关于contentInset的教程。但它什么也没用 - (void)viewDidLoad { [super viewDidLoad];

我有一个这样的观点:

其中,屏幕的前半部分是谷歌地图,后半部分是UITableview,标题单元格中有一个UISearchbar

当我点击搜索栏时,这种情况发生在大屏幕上,但在小屏幕上,我的uisearchbar被键盘覆盖着

如您所见,当键盘显示时,搜索栏会向底部移动一点。我不想那样。它应该将所有内容向上推,使Tableview可见

我遵循了一个关于contentInset的教程。但它什么也没用

- (void)viewDidLoad
{
    [super viewDidLoad];


    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillShow:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillHide:)
                                                 name:UIKeyboardWillHideNotification
                                               object:nil];
}

- (void) dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)keyboardWillShow:(NSNotification *)notification
{
    NSLog(@"KeyboardWillshow");
    // Step 1: Get the size of the keyboard.
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;


    // Step 2: Adjust the bottom content inset of your scroll view by the keyboard height.
    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize.height, 0.0);
    self.tableView.contentInset = contentInsets;
    self.tableView.scrollIndicatorInsets = contentInsets;


    // Step 3: Scroll the target text field into view.
    CGRect aRect = self.view.frame;
    aRect.size.height -= keyboardSize.height;
    if (!CGRectContainsPoint(aRect, _searchBar.frame.origin) ) {
        CGPoint scrollPoint = CGPointMake(0.0, _searchBar.frame.origin.y - (keyboardSize.height-15));
        [self.tableView setContentOffset:scrollPoint animated:YES];
        NSLog(@"Scrolled");
    }
}

- (void)keyboardWillHide:(NSNotification *)notification
{
    UIEdgeInsets contentInsets = UIEdgeInsetsZero;
    self.tableView.contentInset = contentInsets;
    self.tableView.scrollIndicatorInsets = contentInsets;
}
它出现在打印滚动条的if测试中。但还是什么都没发生

其中_searchBar是我的UISearchbar变量

有人有主意吗

编辑:

解决了这个问题,但当点击UISearchbar时,它会向下跳转。这会产生一个如屏幕截图所示的间隙:


如果您的搜索栏、tableview和mapview都位于一个视图中

当键盘显示时,您想将tableview和searchbar推到可见位置

您应该更新
frame
,而不是
contentInset

,请参见下面的示例

- (void)keyboardWasShown:(NSNotification*)aNotification

{

NSDictionary* info = [aNotification userInfo];

CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;


CGRect aRect = self.view.frame;

aRect.size.height -= kbSize.height;

float height =150;
float yPoint = aRect.size.height-height;


[self.tblSearch setFrame:CGRectMake(self.tblSearch.frame.origin.x
                                    , yPoint, self.tblSearch.frame.size.width, height)];



}

我有一个控制器,它有我的地图和桌面视图。所以我需要更新框架?是的,就像@BSKANIA说的,只需重新定位整个视图。完成了。现在我的内容显示出来了。但是uisearchbar仍然会移动一点(看起来很糟糕,它会跳到底部),你必须重新定位整个视图,即在键盘上方包含搜索栏和tableview。是的,但是如何定位呢?我可以通过一名代表让集装箱控制器知道键盘已启动。但是我需要说(使用自动布局),我的uitableview的底部必须等于键盘的顶部。我不知道怎么做。你可以从while视图的高度减去键盘的高度,也可以改变桌子的y位置。谢谢。这很有效。但是UISearchbar在其他视图之间创建了一个间隙。因为它会跳。。就像你在图片上看到的,找到了解决方案。需要设置[self-setEdgesForExtendedLayout:UIRectEdgeNone];谢谢你的帮助。