如何修复 table 视图的搜索栏与状态栏重叠
How to fix table view's search bar overlapping with status bar
我在导航控制器中有一个 UITableViewController,带有一个搜索栏。这就是我在 viewDidLoad 中添加搜索栏的方式:
let resultsController = SearchTableViewController()
resultsController.people = people
searchController = UISearchController(searchResultsController: resultsController)
let searchBar = searchController.searchBar
searchBar.placeholder = "Search a person"
searchBar.sizeToFit()
tableView.tableHeaderView = searchBar
searchController.searchResultsUpdater = resultsController
这是结果:
我尝试编辑情节提要中的 table 视图以添加约束以使其远离顶视图的边距,但我无法添加约束,可能是因为 table 视图是在 UITableViewController 中。
我知道您在 swift 中编写代码,但这就是您在 objectiveC
中隐藏状态栏的方式
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
// iOS 7
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
} else {
// iOS 6
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
}
}
// Add this Method
- (BOOL)prefersStatusBarHidden
{
return YES;
}
这是 swift How do I hide the status bar in a Swift iOS app?
中的答案
我想你需要这段代码。
在您的 viewDidLoad
方法中添加此代码:
self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0)
你的table视图将是这样的:
编辑:
您可以使用以下代码强制滚动 table:
tableView.scrollToRowAtIndexPath( NSIndexPath(index: 0), atScrollPosition: UITableViewScrollPosition.Top, animated: false)
尝试将以下代码放入 didFinishLaunching 中 AppDelegate class
在swift-
var version = ( UIDevice.currentDevice().systemVersion as NSString ).floatValue
if (version >= 7) {
application.setStatusBarStyle( UIStatusBarStyle.LightContent, animated: true);
window?.clipsToBounds = true;
window?.frame = CGRectMake(0,20,self.window!.frame.size.width,self.window!.frame.size.height-20);
}
在 Objective-c -
if (UIDevice.currentDevice.systemVersion] floatValue] >= 7) {
[application setStatusBarStyle:UIStatusBarStyleLightContent];
self.window.clipsToBounds =YES;
self.window.frame = CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
}
并在 ViewController class-
中添加以下方法
Objective-c-
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
swift-
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
添加 UISearchControllerDelegate;
然后
-(void)willDismissSearchController:(UISearchController *)searchController{
_tableView.contentInset = UIEdgeInsetsMake(20, 0, 44, 0);}
我在导航控制器中有一个 UITableViewController,带有一个搜索栏。这就是我在 viewDidLoad 中添加搜索栏的方式:
let resultsController = SearchTableViewController()
resultsController.people = people
searchController = UISearchController(searchResultsController: resultsController)
let searchBar = searchController.searchBar
searchBar.placeholder = "Search a person"
searchBar.sizeToFit()
tableView.tableHeaderView = searchBar
searchController.searchResultsUpdater = resultsController
这是结果:
我尝试编辑情节提要中的 table 视图以添加约束以使其远离顶视图的边距,但我无法添加约束,可能是因为 table 视图是在 UITableViewController 中。
我知道您在 swift 中编写代码,但这就是您在 objectiveC
中隐藏状态栏的方式- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
// iOS 7
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
} else {
// iOS 6
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
}
}
// Add this Method
- (BOOL)prefersStatusBarHidden
{
return YES;
}
这是 swift How do I hide the status bar in a Swift iOS app?
中的答案我想你需要这段代码。
在您的 viewDidLoad
方法中添加此代码:
self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0)
你的table视图将是这样的:
编辑:
您可以使用以下代码强制滚动 table:
tableView.scrollToRowAtIndexPath( NSIndexPath(index: 0), atScrollPosition: UITableViewScrollPosition.Top, animated: false)
尝试将以下代码放入 didFinishLaunching 中 AppDelegate class
在swift-
var version = ( UIDevice.currentDevice().systemVersion as NSString ).floatValue
if (version >= 7) {
application.setStatusBarStyle( UIStatusBarStyle.LightContent, animated: true);
window?.clipsToBounds = true;
window?.frame = CGRectMake(0,20,self.window!.frame.size.width,self.window!.frame.size.height-20);
}
在 Objective-c -
if (UIDevice.currentDevice.systemVersion] floatValue] >= 7) {
[application setStatusBarStyle:UIStatusBarStyleLightContent];
self.window.clipsToBounds =YES;
self.window.frame = CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
}
并在 ViewController class-
中添加以下方法Objective-c-
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
swift-
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
添加 UISearchControllerDelegate;
然后
-(void)willDismissSearchController:(UISearchController *)searchController{
_tableView.contentInset = UIEdgeInsetsMake(20, 0, 44, 0);}