Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.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
Ios @IBDesignable-视图未按预期呈现_Ios_Swift - Fatal编程技术网

Ios @IBDesignable-视图未按预期呈现

Ios @IBDesignable-视图未按预期呈现,ios,swift,Ios,Swift,我有一个自定义的UIView子类,我正试图使用@IBDesignable来呈现它 我有一个名为image的@IBInspectable属性,我从界面生成器中设置了该属性 当我打开interface builder时,我选择的图像在视图中没有正确渲染,也就是说,autolayout看起来有问题。 当我检查报告导航器时,我在界面生成器组中收到一条警告 Showing All Messages (null): -pie being ignored. It is only used when linki

我有一个自定义的
UIView
子类,我正试图使用
@IBDesignable
来呈现它

我有一个名为
image
@IBInspectable
属性,我从界面生成器中设置了该属性

当我打开interface builder时,我选择的
图像
在视图中没有正确渲染,也就是说,autolayout看起来有问题。 当我检查
报告导航器时,我在
界面生成器
组中收到一条警告

Showing All Messages
(null): -pie being ignored. It is only used when linking a main executable
这在
链接下发生

我不知道如何解决这个问题。尝试了许多解决方案。清理生成文件夹,清除派生数据等。没有任何效果

请提供您对此问题的宝贵意见或解决方案。谢谢!:)

编辑:

多亏了@Rob,我才能够集中精力解决这个问题

我拥有的:

带有属性的
IBDesignable
UIView
子类:

  • 名为
    image
    @IBInspectable
    属性
  • 图像视图
  • 滚动视图
我使用初始化并添加ScrollView和ImageView作为子视图

required public init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    initialiseImageView()
}

override init(frame: CGRect) {
    super.init(frame: frame)
    initialiseImageView()
}
问题:

initialiseImageView()中

我将
滚动视图
添加为
ui视图
的子视图,并将
图像视图
添加为
滚动视图
的子视图,以使用
视图进行缩放。我还添加了约束以保持视图的位置。
问题是当我使用:

self.translatesAutoresizingMaskIntoConstraints = false
如果我使用它,我会在运行时收到自动布局警告。但是,
imageView
interface builder
中放错了位置,尽管图像渲染正确。

如果我给出相同的注释,那么在
interface builder
中,一切都是预期的。但是,由于
自动ResizingMaskinToConstraints
,UI在运行时会中断


我有密码。我正在尝试中提到的后一种方法

我正在将所有
自动ResisingMaskintoConstraints
设置为false,并为代码本身中的子视图添加约束。
UIView
子类的约束直接添加到interface builder中,目前不存在任何警告。代码在运行时也能按预期工作。
IBDesignable
部件未按预期工作



奇怪的是,当我拆下电话线时

self.translatesAutoresizingMaskIntoConstraints = false

一切都很顺利。我过去在运行时得到的错误现在消失了。我不知道我做的其他事情是否修复了它。非常感谢您帮助确定问题@Rob。

顺便说一句,我刚刚用
@IBInspectable
做了一个快速的
@IBDesignable
,这是一个
UIImage
和一个
绘图(rect:)
渲染了该图像,效果很好:

@IBDesignable class CustomView: UIView {

    @IBInspectable var image: UIImage?

    override func draw(_ rect: CGRect) {
        image?.draw(at: CGPoint.zero)
    }

}
当我在一个单独的目标中这样做时(对于可指定的目标应该这样做),我也看到了同样的警告:

ld:警告:-饼图被忽略。它仅在链接主可执行文件时使用

我怀疑那个警告可能是在转移视线。
ld
man
页面对
-pie
选项的描述如下:

这使得一种特殊的主可执行文件是位置独立的(PIE)

如果转到可指定目标的链接设置并更改“链接”设置中的“生成位置相关的可执行文件”,则可以切换此设置。那警告就会消失。就我个人而言,我从未注意到警告,也从未更改过此设置,也从未注意到任何不利影响,但如果您想确认这一点以获得自己的满足感,请尝试更改此设置,看看是否可以让警告消失

总之,您的
@IBDesignable
问题可能存在于其他地方,但很难根据提供的信息进行诊断。我们需要更多的信息(或者,理想情况下,需要一个新的答案)


在没有看到这些警告的情况下,很难对自动布局警告进行评论,但我猜(a)您正在添加子视图;但是(b)不设置所述子视图的约束;因此,(c)当您设置
translatesAutoresizingMaskIntoConstraints=false
时,您的约束是不明确的,因此会在运行时产生错误消息和意外布局。或者这可能是滚动视图特性的一个症状。但是很难说没有看到(a)实际的自动布局错误;(b) 您的
@IBDesignable
添加了哪些子视图;以及(c)为子视图添加了哪些约束


总之,确保以编程方式添加的子视图的所有约束都已明确定义。还请记住,scrollview子视图的约束与许多约束的作用不同,它们定义了滚动视图的contentSize而不是子视图的大小。(关于后一点,请参见。)

对于我来说,我删除了一些不再存在的可设计变量

它们被困在用户定义的运行时属性中


删除它,然后清理构建文件夹,重建为我解决了这个问题

谢谢@Rob。你是对的。这个警告与我的设计问题完全无关。让我再看看这个问题,然后我会给你提供MCVE。我有代码。我正在尝试中提到的后一种方法。我正在将所有AutoresizingMaskIntoConstraints设置为false,并在代码本身中为子视图添加约束。UIView子类的约束直接添加到interface builder中,目前不存在任何警告。代码在运行时也能按预期工作。IBDesignable部分没有按预期工作奇怪的是,当我删除行
self.translatesAutoResizingMackintoConstraints=false
时,一切都正常工作。我过去在运行时得到的错误现在消失了。我不知道,我