问题标签 [safearea]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
426 浏览

swiftui - 热门在 SwiftUI 中设置额外的安全区域插图

我正在尝试动态地向安全区域添加额外的填充。为了实现这一点,我编写了将 SwiftUI 视图包装到其中UIHostingController并对其进行设置additionalSafeAreaInsets的修饰符:

在涉及复杂导航之前,这非常有效:

在上面的示例中,更改选项卡会导致NavigationView完全崩溃: Broken navigation

这种行为可以解决吗?是否有另一种方法来实现扩展安全区域?谢谢。

0 投票
1 回答
109 浏览

ios - 从 prefersStatusBarHidden 检测屏幕缺口

StackOverflow 上有很多关于检测 iPhone 设备屏幕上是否有凹口的问题,例如这个。答案几乎总是建议使用safeAreaInsets顶部窗口的属性。我在我的应用程序中使用它来确定是否应该显示状态栏,从prefersStatusBarHidden当前显示的视图控制器的方法。我想在有缺口时显示状态栏,但在没有缺口时不显示。它在我的所有测试中都运行良好,但对于某些客户来说,状态栏有时会消失,即使他们使用的是带有缺口的设备(iPhone 12 Pro Max)。

我调查了一下,我认为问题可能是由对 的递归调用引起的safeAreaInsets,请参见以下调用堆栈:

在此处输入图像描述

这有点道理。为了确定安全区域需要多大,iOS 需要知道是否需要显示状态栏。因此,它调用prefersStatusBarHidden可见视图控制器,然后使用安全区域来确定......

尽管进行了递归调用,但它在测试中仍然适用于我,但如前所述,它有时对某些用户来说会失败。我需要使用prefersStatusBarHidden,因为在顶层应用程序包含一个UITabBarController,只有一个选项卡隐藏状态栏。其他选项卡应始终显示状态栏,与是否有缺口无关。

我考虑过使用sysctlbynamewith"hw.machine"参数检查设备类型,然后使用映射表来获取缺口/无缺口结果。但这有一个缺点,即需要为每个新的 iPhone 型号更新映射表,并且它不能在总是返回 Mac 机器名称的模拟器上工作。

任何想法如何以更好的方式解决这个问题?我可以简单地避免递归调用,但这会解决问题吗?


我现在确定缺口的代码(Objective-C):

0 投票
0 回答
203 浏览

android - Flutter SafeArea:避免缺口,但忽略圆角

有没有办法检测和避免手机屏幕上的缺口(例如,iPhone X 中的摄像头缺口),但忽略屏幕的圆角?

例如,这是我在 iPhone 上的横向模式下的应用程序,带有一个缺口:

横屏模式下的手机截图

左边的菜单很好——屏幕的圆角不会干扰按钮。

右边的菜单显然是有问题的——缺口几乎完全遮住了中间按钮。

我玩过这个小SafeArea部件,但是这个小部件避免了凹口圆角,这导致了这样的布局:

与上面相同的屏幕截图,但包含在 SafeArea 小部件中

右侧菜单的位置合理(尽管它很丑),但现在左侧菜单栏漂浮在远离屏幕边缘的位置,以避免出现圆角。

我怎样才能两全其美?我想要第一个屏幕截图中的左侧菜单栏,以及第二个屏幕截图中的右侧栏。有没有办法配置SafeArea小部件以避免缺口但不是圆角?

0 投票
1 回答
290 浏览

ios - 在 Xcode 的 Storyboard 中更改视图控制器安全区域的大小

不知何故,我放置在情节提要中的视图控制器的安全区域已经为 Y 88 拾取了一个奇怪的起始值。这推动了与之相关的所有内容,主要是一个 tableview。

在此处输入图像描述

关于视图控制器还有一些其他奇怪的事情。如果我将其保留为固定,则视图控制器的高度为 896。我可以更改为自由格式,然后手动减小尺寸,但这无法更改安全区域,并且所有内容仍被按下。如果我更改为自由格式并返回固定格式,则 VC 会返回 896。

我尝试取消选中安全区域,然后重新检查,但同样的问题再次出现。

将不胜感激有关如何解决此问题的任何建议。

在此先感谢您的任何建议。

0 投票
1 回答
55 浏览

swift - 没有安全区域无法查看 maxX

我正在尝试获取视图的 maxX 以进行计算,但是尽管视图位于堆栈视图内(与其他视图一起)并且约束不在安全区域内(而且看起来也是如此)当我在正在做

在我看来,它让我查看 maxX + safe area x ..(我检查过)

有谁知道为什么并有任何解决方案?

--------------

编辑:

感谢@Sweeper,我了解我的错误以及我需要什么:

这个给出了正确的 maxX。

---------------

谢谢,大卫

0 投票
0 回答
43 浏览

flutter - 如何使用 Google 移动广告显示静态横幅广告并使用 SafeArea 小部件包装它?

我想重新创建旧的 firebase_admob 包的行为,它会在每个屏幕的顶部显示一个覆盖横幅。

github 上的一位用户在 issue #60上建议的这段代码几乎符合我的意图:

总体思路是在 MaterialApp 上进行导航,同时横幅保持在底部。但是,我不能用 SafeArea 小部件包装 Stack。我收到此错误:

从传递给 MediaQuery.of() 的上下文开始,找不到 MediaQuery 祖先。这可能是因为您没有添加 WidgetsApp、CupertinoApp 或 MaterialApp 小部件(这些小部件引入了 MediaQuery),或者如果您使用的上下文来自这些小部件上方的小部件,则可能会发生这种情况。

事实上,如果我用 SECOND MaterialApp 包装 SafeArea,它会起作用。但我认为拥有两个 MaterialApp 小部件根本不是一个好习惯。

我认为拥有这个 SafeArea 小部件很重要,这样横幅就不会被某些系统导航栏覆盖。

0 投票
2 回答
49 浏览

swift - 如何将其移至顶部?

我刚刚学会了如何实现特定的圆角,但现在似乎没有任何东西可以与屏幕顶部对齐,即使有垫片也是如此。如何让它与屏幕顶部对齐?

此外,我希望果岭忽略顶部安全区域,但它之前也没有这样做。

提前致谢。

0 投票
1 回答
345 浏览

swift - 如何使用 SwiftUI 对地图应用动态旋转

所以我正在使用 Mapbox,我不想使用 userTrackingMode = .followWithHeading,因为当你旋转它时,这会导致我的设备出现太多延迟。相反,我想加入 .rotationEffect(Angle(degrees: degree)) SwiftUI 属性。我的地图几乎就是在这里找到的基本地图(https://docs.mapbox.com/help/tutorials/ios-swiftui/)。我的地图通过以下方式初始化:

任何有助于理解如何以这种方式正确旋转视图的帮助将不胜感激。

0 投票
1 回答
200 浏览

unity3d - Unity SafeArea 在不同的起始轮换之间不一致

我正在尝试制作一个脚本,在设备旋转时调整 Canvas 的 SafeArea。我已经让它几乎可以工作了,它在启动时看起来很棒,但是旋转后我得到了一个我无法理解的奇怪结果:SafeArea 根据应用程序是以纵向模式还是横向模式启动而有所不同。

Screen.safeArea例如,当我在 iPhone 12 Pro 上注销 的值时,我得到以下值:

  • 发射时的纵向:(x:0.00, y:102.00, width:1170.00, height:2289.00)
  • 纵向旋转为横向:(x:0.00,y:102.00,宽度:2532.00,高度:927.00)
  • 发射时的横向:(x:141.00,y:63.00,宽度:2250.00,高度:1107.00)
  • 横向旋转为纵向:(x:141.00,y:63.00,宽度:888.00,高度:2469.00)

宽度/高度值在旋转时会发生变化,这是有道理的,但 X/Y 偏移不会。鉴于 iPhone 12 的特殊性质,这意味着当以纵向启动并旋转到横向时,顶部有一个很大的空白区域,但会溢出到侧面的凹槽,而当以横向启动并旋转到时,两侧会有很大的空白空间肖像但溢出缺口到顶部。

这是预期的行为吗?我会认为“纵向启动”和“旋转到纵向”安全区域应该是一样的,对吧?有没有办法强制刷新安全区域或其他东西,以获得正确的 X/Y 值?还是我误解了这应该如何工作?

0 投票
0 回答
24 浏览

ios - 为什么在 Mac OS 上运行的 iPad 应用程序的安全区域没有固定在视图顶部?

我不明白顶部留下的这个空白空间,看起来像是状态栏的空间,但状态栏在 Mac os 上不存在。我错过了什么吗?

正如您在第二张图片中看到的那样,紫色视图被固定到安全区域

在此处输入图像描述