Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何在UIKit中控制深度?_Swift_Autolayout_Uikit - Fatal编程技术网

Swift 如何在UIKit中控制深度?

Swift 如何在UIKit中控制深度?,swift,autolayout,uikit,Swift,Autolayout,Uikit,我对UIKit中的视图深度有疑问。ImageView位于文本字段的顶部,但我希望相反:文本字段位于顶部。下面是显示问题的图像: FWIW:在SwiftUI中,有一个ZStack,它允许人们很容易地定义在什么之上的东西,但我在UIKit中寻找一个解决方案,因为这个项目是为了我学习UIKit的课程 该项目位于GitHub上,名为。此链接指向出现上述问题的提交 谢谢 复制您要放在前面的视图⌘C、 删除旧的并粘贴它⌘V.我实际上找到了两种解决方案: 代码解决方案 发件人: 有了它,我必须将该行添加到视

我对UIKit中的视图深度有疑问。ImageView位于文本字段的顶部,但我希望相反:文本字段位于顶部。下面是显示问题的图像:

FWIW:在SwiftUI中,有一个ZStack,它允许人们很容易地定义在什么之上的东西,但我在UIKit中寻找一个解决方案,因为这个项目是为了我学习UIKit的课程

该项目位于GitHub上,名为。此链接指向出现上述问题的提交


谢谢

复制您要放在前面的视图⌘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中的新手时代太难了,或者可能一开始就违反直觉?