UYearchBar在向下滚动之前不可见

时间:2015-01-24 14:34:24

标签: ios objective-c uitableview uisearchbar uirefreshcontrol

我以编程方式向我的tableHeaderView添加了一个UISearchBar,但它没有显示在视图加载上。 我的桌面内容上方只有一个空白区域。当我向下滚动一点时,它会出现。 我改变了tableHeaderView的背景颜色,看它是否可见 - 我可以看到改变的颜色,所以看起来searchBar本身是不可见的。 有什么想法吗?

这是我的代码:

- (void)viewDidLoad
{
[super viewDidLoad];
...
// Initialize the refresh control.
[self.refreshControl addTarget:self
                        action:@selector(refreshData)
              forControlEvents:UIControlEventValueChanged];
// Suchelemente erzeugen
self.searchBar = [UISearchBar new];
self.searchDC = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self];
self.searchDC.searchResultsDelegate = self;
self.searchDC.delegate = self;
self.searchDC.searchResultsDataSource = self;
self.tableView.tableHeaderView = self.searchBar;
// some attempts to make it visible
self.searchBar.hidden = NO;
self.searchBar.layer.hidden = NO;
[self.searchBar sizeToFit];
}

好的,发现,刷新控件会导致问题。 在viewWillAppear中,调用一个方法来更新刷新控件的标题。当我对此行发表评论时,会显示搜索栏:

self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:title];

那么,如何让它们都起作用?

4 个答案:

答案 0 :(得分:1)

创建一个刷新控件并将其设置为tableview的刷新控件。这样,self.refreshcontrol的属性文本未设置。

UIRefreshControl *refresh = [[UIRefreshControl alloc] init];
refresh.attributedTitle = [[NSAttributedString alloc] initWithString:GetLocalizedString(@"REFRESH_TO_RELEASE_TITLE", nil)];
[refresh addTarget:self action:@selector(refreshViewPulled:) forControlEvents:UIControlEventValueChanged];
self.refreshControl=refresh;

答案 1 :(得分:1)

您可以通过设置它:

_packageoffer

答案 2 :(得分:0)

问题是因为你试图在同一个地方添加2个东西,因为你从未真正指定过任何一个框架,即使UIResultsController知道它去了哪里,它也可以改变,而UIControlEventValueChanged [拖下来]可能是导致帧变化的差异。因此,我建议您通过故事板实现搜索栏,因为您声明正在使用它。将搜索显示控制器拖放到导航栏下方但在表视图上方,您将看到光标变为绿色加号,这意味着您可以将其删除(在本例中为tableViewHeader):

pic1

然后你应该能够按照正常情况继续实用地改变UIRefreshControl

-(void)viewDidLoad {
    self.refreshControl = [[UIRefreshControl alloc] init];
    self.refreshControl.backgroundColor = [UIColor clearColor];
    self.refreshControl.tintColor = [UIColor purpleColor];
    [self.refreshControl addTarget:self
                        action:@selector(refreshView:)
              forControlEvents:UIControlEventValueChanged]
    self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull down to Refresh.."];
}

现在,对于添加到同一位置的两个项目,不应存在冲突的帧更改。

答案 3 :(得分:0)

我遇到了同样的问题。我通过实际调整内容偏移来修复它,以便触发橡皮筋滚动动画,导致UISearchBar重新出现。

如果它不可见,请尝试:

[self.tableView setContentOffset:CGPointMake(0, -1) animated:NO];