Nic*_*ith 219 ios uistatusbar ios7
我的应用程序的第一个屏幕是UITableViewController没有导航栏,这意味着内容在状态栏下流动,因此存在大量文本冲突.我已经调整了两个属性Under top bars,Adjust scroll view insets哪些实际上阻止了它滚动,但代价是保持表视图的顶部.我试图将UITableView帧设置为偏移20像素,但它似乎没有生效,因为我目前需要该应用程序与iOS 6兼容我无法跳转到iOS 7 Storyboards强制自动布局使用顶部高度指南.有没有人找到适用于这两个版本的解决方案?
事情我已经尝试:设置edgesForExtendedLayout,故事情节中更改设置Under top bars和Adjust scroll view,迫使帧到一个新的领域.
一张图片胜过千言万语:

mar*_*osb 365
对于有兴趣复制此内容的任何人,只需按照以下步骤操作:
UIViewControllerUITableViewController从对象库中拖出一个新的如果您按照上述步骤操作,当您运行应用程序时,您将看到没有任何内容,包括将Xcode的复选框调整为"在{顶部,底部,不透明}条形图下延伸边缘",以阻止第一行显示在状态栏下方,你也不能以编程方式解决这个问题.
例如,在上述情况下,下面将有没有效果:
// These do not work
self.edgesForExtendedLayout=UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars=NO;
self.automaticallyAdjustsScrollViewInsets=NO;
Run Code Online (Sandbox Code Playgroud)
这个问题非常令人沮丧,我相信这是苹果公司的一个错误,特别是因为它出现在他们自己的预先连线UITableViewController的对象库中.
我不同意所有试图通过使用任何形式的"幻数"来解决这个问题的人,例如"使用20px的delta".这种紧密耦合的编程绝对不是Apple希望我们在这里做的.
我发现了两个解决这个问题的方法:
保留UITableViewController的场景:
如果你想保持UITableViewController在故事板,而无需手动将它变成另一种观点,你可以嵌入UITableViewController在UINavigationController(编辑>嵌入>导航控制器),并取消选中'显示导航栏’中的检查.这解决了这个问题,无需额外调整,它还可以保留UITableViewController故事板中的场景.
使用AutoLayout并将其嵌入UITableView到另一个视图中 (我相信这是Apple希望我们这样做的方式):
创建一个空UIViewController并拖入UITableView其中.然后,按住Ctrl键拖动到UITableView状态栏.当鼠标到达状态栏的底部时,您将看到一个显示"顶部布局指南"的Autolayout气泡.释放鼠标并选择"垂直间距".这将告诉布局系统将其放置在状态栏的正下方.
我已经在空应用程序上测试了两种方式,但它们都有效.您可能需要做一些额外的调整才能使它们适合您的项目.
lip*_*pka 85
如果你以编程方式做事并且正在使用UITableViewController没有UINavigationController你最好的选择,那就是在以下方面做以下事情viewDidLoad:
斯威夫特3
self.tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
Run Code Online (Sandbox Code Playgroud)
早些时候斯威夫特
self.tableView.contentInset = UIEdgeInsetsMake(20.0f, 0.0f, 0.0f, 0.0f);
Run Code Online (Sandbox Code Playgroud)
该UITableViewController仍将滚动状态栏的后面,但是当滚动到顶部不会在它之下.
Stu*_*ner 23
请注意:这适用于我的以下配置:
如果不满足上述两个要求,您的milage可能会有所不同.
原帖
我以编程方式创建了我的视图,最终为我工作:
- (void) viewDidLayoutSubviews {
// only works for iOS 7+
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
CGRect viewBounds = self.view.bounds;
CGFloat topBarOffset = self.topLayoutGuide.length;
// snaps the view under the status bar (iOS 6 style)
viewBounds.origin.y = topBarOffset * -1;
// shrink the bounds of your view to compensate for the offset
viewBounds.size.height = viewBounds.size.height + (topBarOffset * -1);
self.view.bounds = viewBounds;
}
}
Run Code Online (Sandbox Code Playgroud)
来源(在第39页底部的topLayoutGuide部分).
Eri*_*fin 20
添加到顶部答案:
在第二种方法最初似乎没有工作后,我做了一些额外的修补,并找到了解决方案.
TLDR; 最佳答案的第二个解决方案几乎可以工作,但对于某些版本的xCode ctrl +拖动到"顶部布局指南"并选择垂直间距不会做任何事情.但是,首先调整表格视图的大小,然后选择"顶部空间到顶部布局指南"工作
将空白ViewController拖到故事板上.

将UITableView 对象拖到View中.(不是UITableViewController).使用蓝色布局指南将其放置在正中心.


创建UIViewController的自定义子类,并添加<UITableViewDataSource, UITableViewDelegate>协议.不要忘记在Identity Inspector中将storyboard的ViewController设置为此类.
在实现文件中为TableView创建一个插座,并将其命名为"tableView"


现在对于未剪切到状态栏的部分.



现在您可以像平常一样设置表格视图,它不会剪切状态栏!
小智 11
- (void) viewDidLayoutSubviews {
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone; // iOS 7 specific
CGRect viewBounds = self.view.bounds;
CGFloat topBarOffset = self.topLayoutGuide.length;
viewBounds.origin.y = topBarOffset * -1;
self.view.bounds = viewBounds;
self.navigationController.navigationBar.translucent = NO;
}
}
Run Code Online (Sandbox Code Playgroud)
这是如何在"Swift"中编写它对@ lipka的答案进行调整:
tableView.contentInset = UIEdgeInsetsMake(20.0, 0.0, 0.0, 0.0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
149174 次 |
| 最近记录: |