代码之家  ›  专栏  ›  技术社区  ›  rattletrap99

当应用纵横比约束时,uiImageView消失

  •  1
  • rattletrap99  · 技术社区  · 7 年前

    Xcode 9.3,MacBook Pro运行OS 10.13.4

    当我在ib中向 uiview 添加纵横比约束时,视图不会在模拟器中呈现。为了找出它去了哪里,我记录了不存在约束的相关帧坐标,然后显示。坐标看起来是相同的,但差异见截图。

    没有约束:

    self.view.center=(207.0,368.0)
    self.thumbview.center=(93.0,207.5)
    self.viewfinder.center=(187.5163.5)
    self.view.frame=(0.0,0.0,414.0,736.0)
    self.thumbview.frame=(30.0、174.0、126.0、67.0)
    self.viewfinder.frame=(16.0、75.0、343.0、177.0)
    

    只有纵横比约束:

    self.view.center=(207.0,368.0)
    self.thumbview.center=(93.0,207.5)
    self.viewfinder.center=(187.5163.5)
    self.view.frame=(0.0,0.0,414.0,736.0)
    self.thumbview.frame=(30.0、174.0、126.0、67.0)
    self.viewfinder.frame=(16.0、75.0、343.0、177.0)
    

    如果你有什么想法的话,当然会感谢你的帮助!

    这是ib中场景的一张照片。大的uiImageViewisviewfinder,小的是thumbview:。

    以下是没有约束的情况:

    下面是添加纵横比约束后的情况:

    编辑1

    根据@anton下面的评论,我从取景器的底部和侧面向拇指视图添加了近程约束。但是,这不会产生任何变化--我仍然得到指示存在thumbview的坐标,但它仍然不可见。

    没有约束:

    self.view.center = (207.0, 368.0)
    self.thumbView.center = (93.0, 207.5)
    self.viewFinder.center = (187.5, 163.5)
    self.view.frame = (0.0, 0.0, 414.0, 736.0)
    self.thumbView.frame = (30.0, 174.0, 126.0, 67.0)
    self.viewFinder.frame = (16.0, 75.0, 343.0, 177.0)
    

    只有纵横比约束:

    self.view.center=(207.0、368.0)
    self.thumbview.center=(93.0,207.5)
    self.viewfinder.center=(187.5163.5)
    self.view.frame=(0.0,0.0,414.0,736.0)
    self.thumbview.frame=(30.0、174.0、126.0、67.0)
    self.viewfinder.frame=(16.0、75.0、343.0、177.0)
    

    如果你有什么想法的话,当然会感谢你的帮助!

    这是一张在ib的场景。大UIImageViewviewFinder,小的是thumbView以下内容:

    enter image description here

    以下是没有约束的情况:

    enter image description here

    下面是添加纵横比约束后的情况:

    enter image description here

    编辑1

    根据@anton下面的评论,我在取景器拇指视图.然而,这并没有产生任何变化——我仍然得到表示存在拇指视图但它仍然不可见。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Anton Filimonov    7 年前

    简短的答案是:尝试为 x y 定位到拇指视图(例如对齐其 leading bottom 边缘到 viewFinder )。你可以得到相同的帧,只是因为你在自动布局完成它的“工作”(在 viewDidLoad 例如)。还可以将某些图像设置为该图像视图,或为某个维度设置约束(如果没有此类约束,Autolayout将尝试使用依赖于内容的内部大小 UIImageView )。此外,在这之后,您必须检查接口生成器是否存在其他错误,因为很可能需要为视图设置约束,您的 thumbView 取决于

    如果您真的只有一个Thumb视图约束和它的“纵横比约束”,您可能会在Interface Builder中得到一个错误,它告诉您必须为设置约束 X 那个视图的坐标。如果没有这样的约束,您会得到一个模棱两可的布局,这意味着如何设置视图的位置有许多变化。

    虽然根本没有约束,但系统会转换 frame autoresizing mask 将视图转换为约束,以便获得有效的约束集来设置视图位置和大小,这就是视图可见的原因。由于您向视图中添加了任何约束,所以应该添加足够的约束,以便通过这些约束清楚地定义视图的位置和大小。