草庐IT

iOS Storyboard - 一次禁用 Storyboard上的状态栏

coder 2023-07-27 原文

Interface Builder 中使用 Storyboard 时,Xcode 是否有办法完全禁用状态栏,这样当我创建一个新的 View Controller 我不必一直将“状态栏”从推断变为无。

最佳答案

这是一个完全兼容 iOS 7 的解决方案(但不兼容 iOS 6,因为太多的东西已经改变了)

来自 Apple 文档“:信息属性列表关键引用”:

UIViewControllerBasedStatusBarAppearance( bool 值 - iOS)指定状态栏外观是否基于当前位于状态栏下方的 View Controller 的首选样式。当此键不存在或其值设置为 YES 时, View Controller 确定状态栏样式。当键设置为 NO 时, View Controller (或应用程序)必须分别使用 UIApplication 对象显式设置状态栏样式。 此 key 在 iOS 7.0 及更高版本中受支持。

因此默认情况下此键不存在(= 与添加键相同的行为,但将其设置为 YES):在这种情况下,每个 View Controller 通过覆盖某些方法来确定状态栏行为 - 见下文。

1) 全局显示/隐藏您应用的所有 viewController 的状态栏

所以首先要完整回答你的问题,为你所有的应用程序 viewControllers 做一个单一的全局显示/隐藏设置

第 1 步:在您的 frameWork-Info.plst 文件中,添加关键字“View controller-based status bar appearance”并将其设置为“NO”。将此键设置为“NO”将使 iOS 7 不调用方法“prefersStatusBarHidden”和“preferredStatusBarUpdateAnimation”,请参阅下文。

第 2 步:在项目设置 -> 常规 -> 部署信息中,在应用程序启动期间选择“显示/隐藏”

就是这样:现在您可以全局显示或隐藏状态栏,与 iOS 7 兼容

2) 让您的所有 viewController 单独控制状态栏(= iOS 7 默认值)

第 1 步:不添加 key ,或添加它,但将其设置为 YES,以获得 iOS 7 默认行为

第 2 步:在每个 viewController 中,您现在可以通过重写来确定是否显示/隐藏状态栏:

  • (BOOL)prefersStatusBarHidden
  • (UIStatusBarAnimation)preferredStatusBarUpdateAnimation

因此您需要覆盖这 2 个方法来控制状态栏行为,并为您的应用程序返回适当的值(请参阅文档引用以了解所有可能的值,它有明确的解释)。

要控制应用程序启动期间的行为(显示的第一个 Controller ),请在项目设置下设置显示/隐藏 -> 常规 -> 部署信息

请注意,iOS 7 仅支持单一外观样式 (UIStatusBarStyleLightContent),所有其他样式均已弃用!

因此,您可以轻松地使用按钮打开/关闭栏 - 尽可能灵活!

例如,向您的 viewController 添加一个按钮和一个 bool @property 'isStatusBarHidden' 使用以下代码通过动画打开/关闭栏。

- (BOOL)prefersStatusBarHidden
{
    return self.isStatusBarHidden;
}

- (IBAction)buttonToggleStatusBar:(UIButton *)sender
{
    [UIView animateWithDuration:1.0 animations:^{
        self.isStatusBarHidden = !self.isStatusBarHidden;
        [self setNeedsStatusBarAppearanceUpdate];
    }];

}

你可以为喜欢的动画做同样的事情

高级注意事项:如果您想为@property 'isStatusBarHidden' 设置默认值,您需要在'initWithCoder'(使用 Storyboard 时调用)而不是 viewDidLoad 中这样做。原因是 'prefersStatusBarHidden' 和 'preferredStatusBarUpdateAnimation' 在 'viewDidLoad' 之前被调用

关于iOS Storyboard - 一次禁用 Storyboard上的状态栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8975869/

有关iOS Storyboard - 一次禁用 Storyboard上的状态栏的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  3. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  4. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  5. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  6. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  7. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  8. ruby - 字符串文字中的转义状态作为 `String#tr` 的参数 - 2

    对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一

  9. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

  10. python - 是否可以使用 Ruby 或 Python 禁用 anchor /引用来发出有效的 YAML? - 2

    是否可以在PyYAML或Ruby的Psych引擎中禁用创建anchor和引用(并有效地显式列出冗余数据)?也许我在网上搜索时遗漏了一些东西,但在Psych中似乎没有太多可用的选项,而且我也无法确定PyYAML是否允许这样做.基本原理是我必须序列化一些数据并将其以可读的形式传递给一个不是真正的技术同事进行手动验证。有些数据是多余的,但我需要以最明确的方式列出它们以提高可读性(anchor和引用是提高效率的好概念,但不是人类可读性)。Ruby和Python是我选择的工具,但如果有其他一些相当简单的方法来“展开”YAML文档,它可能就可以了。 最佳答案

随机推荐