UISearchBar在向下滚动之前不可见

我以编程方式向我的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];

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


创建一个刷新控件,并将其设置为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;

这个问题是因为你试图在同一个地方添加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.."];
}

现在,应该不会对添加到相同位置的两个项目发生冲突的框架更改。


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

如果它不可见,请尝试以下操作:

[self.tableView setContentOffset:CGPointMake(0, -1) animated:NO]; 
链接地址: http://www.djcxy.com/p/55975.html

上一篇: UISearchBar not visible until scroll down

下一篇: UISearchBar subview of UITableViewHeader?