Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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
Iphone 默认情况下,在导航控制器中隐藏UITableView搜索栏_Iphone_Objective C_Ios - Fatal编程技术网

Iphone 默认情况下,在导航控制器中隐藏UITableView搜索栏

Iphone 默认情况下,在导航控制器中隐藏UITableView搜索栏,iphone,objective-c,ios,Iphone,Objective C,Ios,我已经读了很多关于这个的帖子,但是它对我来说不太合适。我正在使用最新的4.2SDK 我的密码是 self.tableView.contentOffset = CGPointMake(0.0, 44.0); 这在一定程度上起作用,它会将搜索栏向上移动一点,但不会完全隐藏。我已经尝试将44的值增加到更大的值,但这并没有影响到任何事情!我在表的视图控制器的viewDidLoad方法中调用此代码。有人有什么想法吗 self.tableView.contentOffset = CGPointMake(0

我已经读了很多关于这个的帖子,但是它对我来说不太合适。我正在使用最新的4.2SDK

我的密码是

self.tableView.contentOffset = CGPointMake(0.0, 44.0);
这在一定程度上起作用,它会将搜索栏向上移动一点,但不会完全隐藏。我已经尝试将44的值增加到更大的值,但这并没有影响到任何事情!我在表的视图控制器的viewDidLoad方法中调用此代码。有人有什么想法吗

self.tableView.contentOffset = CGPointMake(0.0, 44.0);

上面的代码实际上可以工作,但需要在UITableView完成其所有单元格的创建后运行。我想这是另一个问题。

另一种方法应该是……在viewDidLoad调用中:

self.tableView.contentInset = UIEdgeInsetsMake(-self.searchDisplayController.searchBar.frame.size.height, 0, 0, 0);
以及实现EndDraging委托方法:

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    CGPoint offset = self.tableView.contentOffset;

    CGFloat barHeight = self.searchDisplayController.searchBar.frame.size.height;
    if (offset.y <= barHeight/2.0f) {
        self.tableView.contentInset = UIEdgeInsetsZero;
    } else {
        self.tableView.contentInset = UIEdgeInsetsMake(-barHeight, 0, 0, 0);
    }

    self.tableView.contentOffset = offset;
}
我希望这会有所帮助(我花了几天时间才弄明白:)

干杯

更新:

正如@carbonr所指出的,从iOS7开始,您应该在viewDidLoad中添加这一行+

self.edgesForExtendedLayout = UIRectEdgeNone;

您可以在
viewDidLoad
中设置表视图的初始边界,以便搜索栏在开始时显示为隐藏

您必须创建
搜索栏
属性,然后使用以下代码:

- (void)viewDidLoad
{
    //...
    CGRect bounds = self.tableView.bounds;
    bounds.origin.y = self.tableView.bounds.origin.y + searchBar.bounds.size.height;
    self.tableView.bounds = bounds;
    //...
}

我也有和你一样的问题。以下代码解决了我的问题。请在viewDidLoad()中添加代码:


我在我的项目中使用了autoLayout。

对于仍在寻找更新解决方案的其他人,您可以查看我的答案


基本上,您需要在第一次调用
viewDidLayoutSubviews
时更新
contentOffset

您能解释一下如何布局tableview吗?我想签出
WantFullScreenLayout
。如果您在底部有一个条形图,可以覆盖部分表格,您可以添加一个footerview 44px高(快速且简单),也可以将表格视图放入parentview(工作量稍大但更干净)。谢谢!这正是我丢失的“设置内容偏移量以消除闪烁”部分。@GrizzlyNetch非常感谢!!!!真棒的解决方案,我已经挣扎了很长时间。这个解决方案的另一个作用是,当用户点击iPhone的顶部(在应用程序之外)时,表格视图会滚动到顶部,但会隐藏滚动条,除非他在那之后将其下拉。@GrizzlyNetch我有一个疑问,在ScrollViewDiEndDraging实现中,我们需要检查正在滚动的表视图是self.searchDisplayController.searchResultsTableView还是self.tableView。@user1046037是一个很好的优化点,但我认为它也可以这样工作。当然,最好检查哪个表被拖拽了。代码在iOS 7上会出现意外行为,要解决这个问题,您需要将它添加到您的
viewDidLoad
。这是一个新的API
self.edgesForExtendedLayout=UIRectEdgeNone如何确保tableview已完成所有单元格的创建?你能给我一些线索吗?谢谢
- (void)viewDidLoad
{
    //...
    CGRect bounds = self.tableView.bounds;
    bounds.origin.y = self.tableView.bounds.origin.y + searchBar.bounds.size.height;
    self.tableView.bounds = bounds;
    //...
}
self.edgesForExtendedLayout = UIRectEdgeNone;