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
时,一切都正常工作。我过去在运行时得到的错误现在消失了。我不知道,我