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

我目前正在ios 7上迁移我的应用程序,并且我已经在新的导航控制器/栏管理上被困了几个小时.
之前,当我们有导航控制器时,我们有一个这样的片段:
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:[[MainViewController alloc]init]];
Run Code Online (Sandbox Code Playgroud)
在界面构建器中,我们可以选择为视图设置现有导航栏,并且所有内容都与实际视图的内容相匹配.
好的,现在,我不知道如何使用界面构建器正确设计.我仍然有我的片段来初始化我的navcontroller.但是在我的MainViewController的界面构建器中,如果我将状态栏设置为半透明或不透明的导航栏,我的顶部偏移量为44px(见下文).
Interface Builder_________________________和结果

现在,如果我将状态栏设置为无,则顶部没有偏移,但由于导航栏导致模拟器上的视图较小,因此界面构建器中视图的底部被切断.
Interface Builder_________________________和结果

我想我真的在这里遗漏了一些东西,但我在iOS7 Transitions Guide中找不到任何主题或苹果信息.
谢谢你的帮助
编辑
正如我们在图片中看到的那样,视图的第一个子节点是包含两个标签的UIScrollView,当没有scrollview时,问题不会出现.如果它是UITableView也会出现.如果标签位于UIScrollView之外,则该标签没有偏移量.
我最近将一些代码迁移到了新的iOS 11 beta 5 SDK.
我现在从UITableView得到一个非常令人困惑的行为.tableview本身并不那么花哨.我有自定义单元格但在大多数情况下它只是为了它们的高度.
当我用tableview推动我的视图控制器时,我得到一个额外的动画,其中单元格"向上滚动"(或者可能整个桌面框架被更改)并沿着推/弹导航动画向下移动.请看gif:
我手动创建tableview的loadView方法和设置自动布局约束等于前置,顶部的tableview的上海华盈的底部.superview是视图控制器的根视图.
视图控制器推送代码非常标准: self.navigationController?.pushViewController(notifVC, animated: true)
相同的代码在iOS 10上提供正常行为.
能指点我指出错误的方向吗?
编辑:我已经制作了一个非常简单的tableview控制器,我可以在那里重现相同的行为.码:
class VerySimpleTableViewController : UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 4
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = String(indexPath.row) …Run Code Online (Sandbox Code Playgroud) 我想放一个水平显示拇指的UICollectionView控件(只有一行拇指).由于某种原因,UICollectionView将拇指向下推44像素,因此"0"高度实际上是"44".我假设它可能会添加这个空间来考虑导航栏高度(我只是假设).由于我的UICollectionView仅在屏幕的一部分上,我不想要这个边距.有没有办法删除它?
我正在使用UISearchController在tableview的标题视图中显示一个搜索栏:
...
self.searchController.hidesNavigationBarDuringPresentation = NO;
self.presentingTVC.tableView.tableHeaderView = self.searchController.searchBar;
[self.searchController.searchBar sizeToFit];
self.presentingTVC.tableView.tableHeaderView = self.searchController.searchBar;
Run Code Online (Sandbox Code Playgroud)
(需要设置tableHeaderView属性两次,否则标题视图与第一行重叠,参见SO上的几个答案)
这是它看起来的样子,在不活动时完美地处于适当位置

搜索栏应该在活动时保持原位 - 我不希望它向上移动以隐藏导航栏.但它意外地动画下来,在它和导航栏之间留下一个空白:

这是一个 奇怪的搜索栏动画视频
如果我只是使用与UISearchController分开的搜索栏,则它在激活时不会显示相同的行为.
在我的呈现视图控制器中,我有self.definesPresentationContext = YES;和self.navigationController.navigationBar.translucent = YES;,并且在IB中没有任何"扩展边缘"框是活动的(所有这些似乎都可能使搜索演示文件无法读取).
有谁知道如何阻止搜索栏动画下来?
我的应用程序似乎布局正确,但我无法实现iOS 7着名的模糊半透明效果.我看起来不透明.

我正试图获得更明显的模糊效果,例如Apple的预告片应用:

在我的UINavigationController的子类中,我使导航栏半透明:
- (id)initWithRootViewController:(UIViewController *)rootViewController
{
if (self = [super initWithRootViewController:rootViewController]) {
self.navigationBar.translucent = YES;
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
在我的UIApplicationDelegate的子类中,我设置了导航栏的色调颜色.我发现色调的颜色没有区别.也就是说,使用0.1的α不会导致条形变得更透明.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UINavigationBar appearance] setTintColor:[UIColor greenColor]];
}
Run Code Online (Sandbox Code Playgroud)
在我的内容视图控制器中,我将边缘设置为,UIRectEdgeNone以便顶部不会被导航栏切断.如果我使用默认设置UIRectEdgeAll,导航栏将永久覆盖我的内容的顶部.即使我生活在这种异常中,UIRectEdgeAll仍然没有启用半透明效果.
- (void) viewDidLoad
{
[super viewDidLoad];
self.edgesForExtendedLayout = UIRectEdgeNone;
}
Run Code Online (Sandbox Code Playgroud)
广告在@rmaddy的评论中指出,问题可能与edgeForExtendedLayout有关.我找到了一个全面的教程edgesForExtendedLayout并试图实现它:
- (void) viewDidLoad
{
[super viewDidLoad];
self.edgesForExtendedLayout = UIRectEdgeAll;
self.automaticallyAdjustsScrollViewInsets = YES;
self.extendedLayoutIncludesOpaqueBars = NO;
}
Run Code Online (Sandbox Code Playgroud)
那没起效.首先,没有半透明效应.其次,我的内容被删除了.在下面带有上述代码的示例页面上,头像最初被导航栏覆盖,很难滚动到.您可以下拉以查看头像的顶部,但是当您放开时,页面会自动反弹并且头像会再次被遮挡.

我有一个嵌入导航控制器的控制器,带有大标题和UIRefreshControl.当我在tableView上进行快速刷新时,活动指示器的动画非常糟糕.
我不知道我的代码中是否有不良行为?
tableView.refreshControl = UIRefreshControl()
tableView.refreshControl?.addTarget(self, action: #selector(downloadData), for: .valueChanged)
我至少有一个UIBarButtonItem's在每一个UIViewController在我的项目,一切都在一个UINavigationController和UINavigationBar是蓝色的,UIBarButtonItem's应该是白色的。
在模拟器中它们是白色的……但在设备中它们是浅灰色的,如下图所示:
模拟器

设备

它们运行完全相同的代码和完全相同的 ios 版本ios 8.1。
我目前正在将情节提要中的色调颜色设置为白色,但我也尝试过:
// In appdelegate
UINavigationBar.appearance().barTintColor = UIColor(hex: 0x4a9bcb, alpha: 1.0)
UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName:UIFont(name: "FuturaLT-Bold", size: 16)!, NSForegroundColorAttributeName:UIColor(white: 1.0, alpha: 1.0)]
UIBarButtonItem.appearance().tintColor = UIColor.whiteColor()
// In map viewcontroller viewDidLoad
self.edgesForExtendedLayout = UIRectEdge.None
self.navigationController?.navigationBar.translucent = false
Run Code Online (Sandbox Code Playgroud)
这给出了相同的结果。
请帮助我了解发生了什么。
我有一个 UIScrollview 在 y 轴上扩展并调用此委托方法:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
float yOff = scrollView.contentOffset.y;
NSLog(@"y off is %f", yOff);
}
Run Code Online (Sandbox Code Playgroud)
当scrollView移动到顶部(即yOff == 0)时,它实际上在大多数手机上停留在-20px,在iPhoneX上停留在-44px。如何关闭这种行为?这样做有哪些风险?
ios ×7
ios7 ×4
swift ×2
uitableview ×2
animation ×1
cocoa-touch ×1
ios11 ×1
ios8 ×1
iphone ×1
objective-c ×1
uicolor ×1
uiscrollview ×1
uisearchbar ×1
uistatusbar ×1