问题
我也试图创建一个自定义搜索文本字段,添加到UITableViewController,始终坚持到页面顶部。 像这样:
一切正常,但当我点击搜索文本字段成为第一个响应者时,tableView奇怪地向下滚动。
我发现当我手动设置UITableView的contentInset时,只发生 。 (因此tableview部分标题不会隐藏在搜索视图后面)
我是如何构建的
层:
用户滚动时修复搜索视图框的代码:
var rect = frame
rect.origin.y = scrollView.contentOffset.y + 64
frame = rect
我可能正在做一切愚蠢的事情,但我希望将视图贴在顶部,因为用户将比其他应用更多地使用搜索。有什么想法吗?
我的应用程序需要iOS 8,因此我无法在iOS 7上进行测试。如果有帮助,我可以进行屏幕录制。
更新 我创建了一个示例项目,其中包含我在主项目中使用的相同对象。 https://www.dropbox.com/s/qdlx0milebbuf3p/Search%20bug%20Example.zip?dl=0
答案 0 :(得分:4)
这是一个UIKit错误。要解决此问题,我已为UITableView
创建了一个子类,从不在isScrollEnabled
为NO
时更改内容偏移量。
·H
@interface CUISearchTableView : UITableView
@end
的.m
#import "CUISearchTableView.h"
@implementation CUISearchTableView
- (void)setContentOffset:(CGPoint)contentOffset {
if (self.isScrollEnabled) {
[super setContentOffset:contentOffset];
}
}
@end
答案 1 :(得分:2)
我不确定你是否需要做所有这些。如果您只是使用UIViewController并向其添加UITableView,那么您可以将UISearchView放置在任何位置(即视图的顶部)。您只需要确保UISearchView是最顶层的视图(将子视图置于前面)。
我知道您正在使用UITableViewController,但如果您想使用自己的搜索视图而不是TableViewController + Search,那么这是您最好的选择。唯一需要的是添加顶级内容偏移量(您已经在做的事情)。然后你可以删除CUISearchTableView。
这是否有意义或我遗失了什么?