Swift 如何在UIKit中控制深度?
我对UIKit中的视图深度有疑问。ImageView位于文本字段的顶部,但我希望相反:文本字段位于顶部。下面是显示问题的图像: FWIW:在SwiftUI中,有一个ZStack,它允许人们很容易地定义在什么之上的东西,但我在UIKit中寻找一个解决方案,因为这个项目是为了我学习UIKit的课程 该项目位于GitHub上,名为。此链接指向出现上述问题的提交Swift 如何在UIKit中控制深度?,swift,autolayout,uikit,Swift,Autolayout,Uikit,我对UIKit中的视图深度有疑问。ImageView位于文本字段的顶部,但我希望相反:文本字段位于顶部。下面是显示问题的图像: FWIW:在SwiftUI中,有一个ZStack,它允许人们很容易地定义在什么之上的东西,但我在UIKit中寻找一个解决方案,因为这个项目是为了我学习UIKit的课程 该项目位于GitHub上,名为。此链接指向出现上述问题的提交 谢谢 复制您要放在前面的视图⌘C、 删除旧的并粘贴它⌘V.我实际上找到了两种解决方案: 代码解决方案 发件人: 有了它,我必须将该行添加到视
谢谢 复制您要放在前面的视图⌘C、 删除旧的并粘贴它⌘V.我实际上找到了两种解决方案: 代码解决方案 发件人: 有了它,我必须将该行添加到视图控制器
self.view.bringSubviewToFront(textField)
故事板解决方案
几天后,我得到了关于这个项目的反馈,我明白了如何在故事板中做到这一点。当视图在序列图像板的层次结构中向下显示时,它们将显示在顶部
所以,我从:
致:
代码起作用了。FWIW差异为:
diff --git a/MemeEditor/Base.lproj/Main.storyboard b/MemeEditor/Base.lproj/Main.storyboard
index c4fbb55..18400ce 100644
--- a/MemeEditor/Base.lproj/Main.storyboard
+++ b/MemeEditor/Base.lproj/Main.storyboard
@@ -16,6 +16,14 @@
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
+ <stackView opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="l0u-Hb-3mT">
+ <rect key="frame" x="0.0" y="44" width="414" height="818"/>
+ <subviews>
+ <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="JJT-iB-9fc">
+ <rect key="frame" x="0.0" y="0.0" width="414" height="818"/>
+ </imageView>
+ </subviews>
+ </stackView>
<textField contentMode="center" contentHorizontalAlignment="center" contentVerticalAlignment="center" placeholder="TOP MESSAGE" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="cOM-zN-T9a" userLabel="Top Text Field">
<rect key="frame" x="10" y="84" width="394" height="49.5"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@@ -28,14 +36,6 @@
<fontDescription key="fontDescription" name="HelveticaNeue-CondensedBlack" family="Helvetica Neue" pointSize="40"/>
<textInputTraits key="textInputTraits" autocapitalizationType="allCharacters"/>
</textField>
- <stackView opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="l0u-Hb-3mT">
- <rect key="frame" x="0.0" y="44" width="414" height="818"/>
- <subviews>
- <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="JJT-iB-9fc">
- <rect key="frame" x="0.0" y="0.0" width="414" height="818"/>
- </imageView>
- </subviews>
- </stackView>
<toolbar opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="OY4-30-dsi">
<rect key="frame" x="0.0" y="813" width="414" height="49"/>
<items>
我正在寻找一个解决方案在UIKit,因为这个项目是为一门课程,我正在做的学习UIKit
从您的问题来看,听起来您正在寻找一种在代码中实现这一点的方法。UIView包含许多方法,可用于更改子视图的z顺序,例如insertSubview_U2;:上子视图:和insertSubview_U2;:下子视图:,但是,由于已有两个子视图,您可以使用它们来交换文本视图和图像在子视图数组中的位置。在UIKit中,z索引仅由视图在其superview中的顺序指定,因此只需将图像作为第一个子视图移动stackview即可。事实已经如此,但这不会影响秩序。请稍等……对于像我这样的UIKit初学者来说,这个答案没有很好的解释。几天后,我明白了故事板需要做什么改变。我需要让文本视图出现在故事板层次结构的下方。如果这个解决方案在您的案例中奏效,那就太好了,但是将SubViewToFront:引入到前面是一个相当迟钝的工具-有时您不想将模糊的子视图一直移动到前面。感谢您指出@Caleb!我找到了另一个解决方案,所以我更新了响应以包含这两个选项。我不知道“exchangeSubviewat:withSubviewAt:”,很好!我不打算在代码中寻找这样做的方法。。。只是我在故事板上四处看了看,错误地认为uikit中的新手时代太难了,或者可能一开始就违反直觉?