【问题标题】:Swap views but maintain constraints in Interface Builder在 Interface Builder 中交换视图但保持约束
【发布时间】:2015-10-02 01:51:09
【问题描述】:

在 Interface Builder 中,我有一个 UIView,它附加了一组复杂的约束。将这个UIView 换成UIImageView 而不必重新创建所有约束的最佳方式是什么?

删除UIView 也会删除它的约束。

注意:简单地将UIView 的类设置为UIImageView 是行不通的,因为它没有提供与图像视图相关的所有可变属性。

【问题讨论】:

  • 只是一个简单的想法,为什么不在你的UIView 中添加一个UIImageView
  • 谢谢!会工作,但使它比它需要的复杂一点。另外我想知道是否有通用解决方案 - 例如将UILabel 换成UIButton 等。

标签: ios iphone xcode ipad interface-builder


【解决方案1】:

我认为您需要再次手动创建所有约束,但我会等待删除旧 UIView 并在复制新 UIImageView 上的所有约束参数时将其用作参考。

【讨论】:

  • 谢谢。我四处寻找,实际上确实找到了解决方案-尽管很老套。看我的回答。
【解决方案2】:

令人恼火的是,这个问题没有聪明的答案。 IB 根本无法让您切换控制类型。哦,Xcode,你让我们失望了。

但是,有一种 hacky 方法,由该博客描述:http://codenetwaves.blogspot.com.br/2012/09/change-view-to-scrollview-in-xcode.html

步骤如下:

  1. 右击storyboard,选择Open As --> Source Code

  2. 情节提要是一个 XML 文件。找到要更改的视图。将<view ...> ... </view> 替换为<imageView ...> ... </imageView>。不要更改任何其他内容。

  3. 再次右键单击情节提要,然后在 Interface Builder 中打开。视图已转换为UIImageViews,您可以访问所有正常的UIImageView 属性。

【讨论】:

  • 也使用 'pickerView' 到 'datePicker',或者至少还没有问题。如果 Apple 的任何人看到了这一点,那么更换视图类型就是一场噩梦,而更“官方”/更少“hacky”的方式会很棒。
  • 这是一个非常聪明的答案。不幸的是,它对我不起作用:Command /Applications/Xcode.app/Contents/Developer/usr/bin/ibtool failed with exit code 255
  • 您也可以将“view”更改为“stackView”,将属性axis="vertical"horizontal 添加到stackView 标签中,例如<stackView axis="vertical" ...
  • 当尝试以这种方式更改 collectionView 的 tableView 时,它会导致 Xcode 崩溃。
  • 所以。许多。事物。崩溃 Xcode。我不记得它曾经稳定过。我建议这可能是因为表视图和集合视图从根本上是不兼容的——你不能只是将一个换成另一个。 (但是,正如每个优秀的程序员都知道的那样,Xcode 仍然不应该崩溃!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 2015-08-12
  • 1970-01-01
相关资源
最近更新 更多