我有一个自定义UIView
子类,我尝试使用@IBDesignable
呈现。
我有一个名为@IBInspectable
的{{1}}属性,我是从界面构建器设置的。
当我打开界面构建器时,我选择的image
在视图中没有正确呈现,也就是说,它看起来像autolayout有些麻烦。
当我选中image
时,我会在Report navigator
群组中收到警告。
Interface Builder
这发生在Showing All Messages
(null): -pie being ignored. It is only used when linking a main executable
部分。
我不知道如何解决这个问题。尝试了SO的许多解决方案。清理构建文件夹,清除派生数据等。没有任何效果。
请提供您宝贵的意见或解决此问题的方法。谢谢! :)
修改
感谢@Rob,我可以解决这个问题。
我有什么:
具有属性的Link <IBDESIGNABLE_EXECUTABLE>
IBDesignable
子类:
UIView
的{{1}}媒体资源。我使用
初始化并将ScrollView和ImageViews添加为子视图@IBInspectable
问题:
image
:
我将required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialiseImageView()
}
override init(frame: CGRect) {
super.init(frame: frame)
initialiseImageView()
}
作为initialiseImageView()
和scrollView
的子视图添加为UIView
的子视图,以使用ImageView
代理。我还添加了约束来保持视图。
问题是我使用时:
scrollView
如果我使用它,我会在运行时收到autolayout警告。但是viewForZooming
中的self.translatesAutoresizingMaskIntoConstraints = false
放错了位置,尽管图像渲染正确。
如果我对此进行评论,则imageView
中的所有内容都符合预期。但由于interface builder
,UI在运行时中断。
我将所有interface builder
设置为false,并在代码本身中添加子视图的约束。 AutoresizingMaskIntoConstraints
子类的约束直接添加到接口构建器中,截至目前不存在警告。代码在运行时也按预期工作。 AutoresizingMaskIntoConstraints
部分是未按预期工作的部分。
奇怪的是,当我删除了这行
UIView
一切都很完美。我以前在运行时获得的错误现在已经消失了。我不知道我做的其他事情是否已经解决了。非常感谢帮助确定问题@Rob。
答案 0 :(得分:3)
顺便说一句,我刚刚用@IBDesignable
快速@IBInspectable
做了一个UIImage
和一个draw(rect:)
来渲染该图片并且工作正常:
@IBDesignable class CustomView: UIView {
@IBInspectable var image: UIImage?
override func draw(_ rect: CGRect) {
image?.draw(at: CGPoint.zero)
}
}
当我在一个单独的目标中执行此操作时(因为应该使用可设计的目标),我也会看到相同的警告:
ld:警告:-pie被忽略。它仅在链接主可执行文件时使用
我怀疑警告可能是红鲱鱼。 man
的{{1}}页面描述了ld
选项,如下所示:
这是一种特殊的主要可执行文件,它与位置无关(PIE)。
如果您转到可设计的链接设置,则可以切换此设置。目标并更改&#34;生成位置相关的可执行文件&#34;在&#34;链接&#34;设置。那个警告就会消失。就个人而言,我从来没有注意到这个警告,也从未改变过这种设置,也没有注意到任何不良影响,但如果你想根据自己的满意度确认这一点,请尝试更改此设置并查看是否可以收到警告离开。
最重要的是,您的-pie
问题可能在其他地方存在,但根据提供的信息很难诊断出来。我们需要更多信息(或者,理想情况下,MCVE)。
很难在没有看到警告的情况下评论您的自动布局警告,但我猜测(a)您正在添加子视图;但(b)没有为所述子视图设置约束;因此(c)当你设置@IBDesignable
时,你的约束是不明确的,因此在运行时会导致错误消息和意外布局。或者它可能是滚动视图特性的症状。但是,如果没有看到(a)实际的自动布局错误,很难说; (b)您translatesAutoresizingMaskIntoConstraints = false
添加的子视图; (c)您为子视图添加了哪些约束。
从底线开始,确保以编程方式添加的子视图明确定义了所有约束。还要记住,scrollview子视图的约束与许多约束的作用不同,定义滚动视图的contentSize而不是子视图的大小。 (关于后一点,请参阅TN2154。)
答案 1 :(得分:0)
对我来说,我删除了一些不再存在的ibdesignable变量。
它们被卡在用户定义的运行时属性中。
删除该文件,然后清理构建文件夹,然后重新构建为我解决了这个问题!