Xcode 9 - 本地化问题 警告 Storyboard

31

我目前正在测试 Xcode 9 beta 3。

在查看 storyboard 时,我收到一系列警告,提示在其他语言/地区中,我的固定约束可能会出现问题。

应用程序相当复杂,许多视图都遇到了这些警告。

警告是:

某些自动布局约束组合可能会在当前开发语言中导致适当的布局,但在其他语言和地区中会出现问题。

我知道该应用程序不会很快在其他语言中使用。

有没有办法只关闭这个警告?听起来很傻,但我无法忍受看到所有视图的黄色警告图标和顶部的计数(110个警告!)

本地化问题


https://stackoverflow.com/questions/33111048/how-to-suppress-or-ignore-all-warnings-in-xcode - LC 웃
1
你截图中的黄色三角形是可点击的,并提供一个弹出窗口,显示建议的解决方案。解决这些问题是最理想的解决方案。这些问题在后来的Xcode 9 beta版本以及Xcode 9.1中得到了改进。目前没有办法关闭警告,除非取消本地化文档。如果有任何看起来不正确的警告,请在bugreport.apple.com上报告错误,并附上示例文档。 - Quinn Taylor
4个回答

77

产生不必要警告的原因是,Xcode 默认将 storyboards 准备为本地化。使用 基本国际化 进行设置,使之能够准备本地化。

要在特定的 storyboard 中完全禁用此警告,您需要让 Xcode 知道该 storyboard 不应被认为是可本地化的。我能够做到最简单的方法是:只需将 storyboard 文件从 Base.lproj 文件夹中移到上一级并重新将文件添加到项目中。这样做后,警告消失了。

步骤

此过程适用于新旧项目。在 Xcode 9.1 上测试,使用 Xcode 9.1 创建的项目。

  1. 通过 Finder 将 storyboard 从 Base.lproj 文件夹移动到上一级
  2. 通过 Xcode 从项目中删除 storyboard 引用
  3. 将 storyboard 拖放或以其他方式重新添加到项目中
  4. 使用文件检查器验证 storyboard 不再具有基本本地化

     

图片演示

Xcode 默认将 storyboards 准备为本地化

Xcode default storyboard folder structure

   

将你的Storyboard文件移出Base.lproj文件夹以防止警告

期望的文件夹结构

     

删除文件引用

删除文件引用

     

重新添加Storyboard

把文件拖回项目中 在此输入图像描述

     

当你成功后,你会看到"本地化..."按钮

Yay! No more warnings

如果您想将其本地化

只需点击“本地化…”按钮并按照Xcode中的提示操作即可。此外,您实际上需要解决Xcode提示您处理的警告。有各种方法可以解决它们,我建议从这个问题开始。

有关该过程的视频演示,请观看这个屏幕录制.


1
你需要使用Finder将它上移一级。它会在一个名为Base.lproj或English.lproj或其他语言点lproj的文件夹中。使用Finder,将Storyboard文件从该文件夹中移出。此时,Xcode将不知道文件在哪里,因此删除引用并通过简单地拖放重新添加文件。 - allenh
太棒了。这会对长远的影响有什么作用吗?当我选择这样做时,我能把它移回“Base.lproj”目录吗?在我执行此选项之前,请确保一下。 - Simon
如果您决定支持本地化,只需按下“本地化...”按钮,Xcode将把您的故事板移动到您选择的lproj文件夹中(它会提示基础或开发语言)。 - allenh
我正在尝试这种方法,但每次运行时都会出现“终止未捕获类型为NSException的异常”。我的步骤是:使用Finder将Main.storyboard移动到Base.lproj之外。然后用Xcode打开项目。删除旧的Main.storyboard,因为它的位置无效。然后从Finder拖动文件到Xcode中。编译并运行。 - Jason Brady
1
@NSPratik 谢谢你的回复,我去更新了指令图片,发现 Xcode 9.1 不再支持那种修复文件引用的方法。我更新了指令,提供了一种删除和重新添加的解决方案,应该更加清晰明了。 - allenh
显示剩余10条评论

4
假设您的应用程序没有本地化,您需要在storyboard中恢复Localize设置。我们的其中一个设置为英语。取消选中英语框,或者取消您所设置的任何内容。storyboard位于带有语言代码en(英语)的文件夹中。取消选中此框将从项目目录中删除它,因为App不再查找en文件夹。在finder文件夹中查找storyboard,将其从en文件夹中移动,然后将其拖回到项目中。确保已选中Target Membership。根据需要进行清理、关闭、打开、强制退出等操作,然后您就可以开始使用了!我们在一个storyboard中有360个警告,所以解决这个问题真是太好了!

enter image description here


一开始看到故事板消失并且在垃圾桶里找到它时,我感到有些害怕,但是我同意这解决了警告问题哈哈。 - Yaroslav Dukal

2
您可以通过将标签或按钮嵌入透明视图中来消除本地化问题警告。然后从标签或按钮中删除固定宽度约束,并将其设置为该容器视图。
通过使用容器视图,您可以消除警告并仍能本地化故事板。有时,即使语言会更改,您需要具有固定宽度的标签或按钮,如果您确定固定宽度足够大,这不应该成为问题,但Xcode不知道这一点,因此您会收到警告 ;-)

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接