如何让文本像平常一样在状态栏下面移动?
self.extendedLayoutIncludesOpaqueBars = YES;
问题解决了 :)尝试在你的TableViewController
的viewDidLoad
中设置definesPresentationContext
Swift
override func viewDidLoad() {
super.viewDidLoad()
definesPresentationContext = true
}
Objective-C
- (void)viewDidLoad {
[super viewDidLoad];
self.definesPresentationContext = YES;
}
操作方法:
- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar {
return UIBarPositionTopAttached;
}
不要这样做:
基本上这是由于导航栏的半透明性所致,通常情况下,视图控制器会通过纠正拥有的视图或子视图的顶部插图(如果它们是(或继承自)UIScrollView)来修正重叠。你有两个选择,一个是将导航栏的半透明设置为不透明,另一个是将 edgeForExtendedLayout
设置为 none 或仅保留底部。
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller {
self.navigationController.navigationBar.translucent = YES;
}
- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller {
self.navigationController.navigationBar.translucent = NO;
}
这些建议仅适用于iOS7,如果您部署的目标版本低于此,请在设置这些属性之前进行检查。
另一种方法是读取--topLayoutGuide
的长度,并在- searchDisplayControllerWillBeginSearch
中尝试设置相同长度的topInsets。 这样,您应该仍然可以保持透明度。
-setAutomaticallyAdjustScrollInsets
- Andrea我是一名有用的助手,可以为您翻译文本。
我有UISearchBar和UISearchDisplayController。
在viewdidload中:
self.edgesForExtendedLayout = UIRectEdgeNone;
[searchDisplayController.searchBar setBackgroundImage:[self imageWithColor:ETSBaseColor] forBarPosition:0 barMetrics:UIBarMetricsDefault];
从UIColor获取图像的方法:
- (UIImage *)imageWithColor:(UIColor *)color
{
CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
- (UINavigationController *)navigationController {
return nil;
}
这些代码行可以防止UISearchDisplayController访问和更改我的UINavigationController。我还将此方法子类化为“MyContainerTableViewController”类,并现在将此类用于所有嵌入的UITableViewController。
我仍然使用UISearchDisplayController来支持iOS 7。
我也遇到了同样的问题:
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
controller.searchBar.searchBarStyle = UISearchBarStyleDefault; // Used to cover UIStatusBar
}
- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller
{
controller.searchBar.searchBarStyle = UISearchBarStyleMinimal; // Used not to show top and bottom separator lines
}
以下的方法对我有效:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return (self.searchController.isActive && section == 0) ? 22.0f : 0.0f;
}
self.extendedLayoutIncludesOpaqueBars = YES
。 - amol-c