Interface Builder 中的“查看方式”问题
Posted
技术标签:
【中文标题】Interface Builder 中的“查看方式”问题【英文标题】:Issues with 'View as' in Interface Builder 【发布时间】:2018-08-06 21:31:08 【问题描述】:当我尝试在界面生成器中使用“查看为”选项时,我目前遇到了问题。
例如,当为 iPhone 8 Plus 选择“查看方式”时,所有视图约束都会更新,以便在 iPhone 8 Plus 上的界面构建器中看起来不错,但 UITableViewCells 的子视图不会在界面构建器中更新。这可以在下面的屏幕截图中看到。
Viewing as iPhone 8 Plus, switched from viewing as iPhone X
Viewing as iPhone X, switched from viewing as iPhone 8 Plus
通常这不会真正打扰我,因为它会构建并更新所有约束,但是当我构建应用程序时,由于某种原因,我在 UITableViewCell 的主子视图上设置的 CAGradientLayer 不会更新到这些约束,并保留上一个“查看为”选项的约束。
CAGradientLayer constraint issues
我尝试覆盖layoutSublayers(of: CALayer)
,然后更新CALayer 的宽度以更新UIView 的新宽度,但这不起作用,因为UIView 的框架没有更新以反映更新的约束。
有什么方法可以在应用约束的情况下获得 UIView 的宽度?或者有没有我可以在 Xcode 中应用的修复程序来解决这个问题。
非常感谢,
-威廉
【问题讨论】:
你在哪里设置渐变? @GIJOW 我有一个 UIView 的扩展,用于创建和设置渐变。 你能测试一下...如果你在 viewDidAppear 上设置渐变,它是否有效? @GIJOW 我在 UITableViewCell 类中设置渐变,其中 viewDidAppear 函数不可用。谢谢 【参考方案1】:更新layoutSubviews
内部渐变的边框
override func layoutSubviews()
super.layoutSubviews()
// set the frame of the gradient here
【讨论】:
没用,我更新了图层宽度以匹配它的超级视图宽度,如下所示:layer.frame.size.width = bgView.frame.size.width
。
bgView 的宽度是否正确??可以分享这个单元格自定义类代码和 IB/xib 的图像以上是关于Interface Builder 中的“查看方式”问题的主要内容,如果未能解决你的问题,请参考以下文章
了解 Interface Builder 中的 Outlets
Interface Builder中的UIScrollView不滚动