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 中的“查看方式”问题的主要内容,如果未能解决你的问题,请参考以下文章

iOS Interface Builder 中的架构方法

了解 Interface Builder 中的 Outlets

Interface Builder中的UIScrollView不滚动

Interface builder中的NSWindowController对象链接

Interface Builder 中的自定义字体

Interface Builder 中的相对自动布局约束