我以编程方式向我的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];
那么,如何让它们都起作用?
答案 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):
然后你应该能够按照正常情况继续实用地改变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];