【问题标题】:AutoLayout labels getting cut off on right side of screen自动布局标签在屏幕右侧被截断
【发布时间】:2014-12-25 19:05:44
【问题描述】:

我正在尝试在我的应用中为自定义表格视图单元格使用自动布局。

我似乎无法完全正确地得到约束。

我在自定义表格视图单元格中放置了标签,但标签仍然被切断。有什么想法吗?

谢谢!将发布任何其他需要的东西。试图在下图中显示所需的信息:

在 Xcode 中调试。不知何故,模拟器中显示的内容与 Xcode 调试中的不同。

这是我的 TableView 显示的宽度:

更新: 这里的问题与用户 matt 在接受的答案中所说的内容有关,但我想让 Q&A 更清晰一些,因为我已经为遇到此问题的其他人弄清楚了。

在他最初的评论中,他提到了 Xcode View 调试,这很棒,我能够深入挖掘。它被称为助手编辑器:设备预览,您可以在其中查看屏幕上内容的布局和图层,以查看是否有标签重叠或脱离基于它运行的设备的屏幕。如果您想检查多个设备的大小,只需点击此图片左下角的加号图标。

这帮助我找到了 TableView 的重叠层和大小问题。我能够看到它在每种设备尺寸上的外观。

这里有时也有助于使用 Pin 菜单。有时标签可能会跑出屏幕,因为它不知道单元格的约束基于设备大小的位置。因此,如果标签基于横向布局但设备是 iPhone 5 并且是纵向的,则您的标签可以在屏幕外运行。这是 Pin 菜单:

希望这是有道理的,并为问题提供更多色彩。如果您有任何问题,请告诉我,谢谢大家的帮助!

【问题讨论】:

  • 你好。你知道 Xcode 6 视图调试,对吧? (就像 Reveal。)所以使用 Xcode 6 视图调试来看看这里到底发生了什么。
  • @matt 是的,我一直在试图弄清楚,因为它向我展示了与我在模拟器中运行的不同的东西,所以我不确定发生了什么?我更新了我的问题以显示模拟器与查看调试显示的 2 张额外图片。如果您知道为什么会发生这种情况,请告诉我们。
  • 嗯,这看起来正是我在您提出的另一个问题上所建议的 - 问题不是标签,而是表格视图本身太宽了。
  • “我只是将 TableView 拖到了视图控制器中” - 不,你把它拖到了视图控制器的 view 中。现在你必须担心它的大小。视图控制器的视图会自动调整大小,但表格视图不会。那么...对表格视图有什么限制?完全取决于你自己。
  • 啊,我看到了你的区别。我没有对表格视图施加任何约束,所以我猜我应该在每一侧放置一个 0 约束?谢谢马特!

标签: ios uitableview storyboard xcode6


【解决方案1】:

问题是您正在使用自动布局,但您没有对调整表格视图大小做任何事情。这里的表格视图不是你的视图控制器的视图;这是一个子视图。您的视图控制器的视图会自动调整为设备/窗口的大小,但它的子视图不会自动调整大小。所以你最终得到的表格视图对于设备来说太宽了;整个桌子都伸到了右边的空间里。

【讨论】:

  • 说得有道理,感谢您在这里也详细说明了一点,所以至少,我需要对听起来像的正确尺寸进行某种限制
  • 不,不是“至少”。约束必须完全确定一切的大小和位置。
  • K 猜想我写的时候应该更清楚,不是最低限度,而是作为“最低限度之一”,你是对的,谢谢!
【解决方案2】:

使用标签右侧到其父视图边缘的尾随空格,并将其设置为 greater than 而不是 equals,其值为 ~ 5

【讨论】:

  • 在我的原始问题中添加了另一个屏幕截图,显示了我根据您的建议尝试了什么,但由于某种原因它仍然被切断,有什么我想念的东西吗?谢谢李维!
  • 它看起来不错,但也许它的超级视图已经关闭了。您应该在cellForRowAtIndexPathwillDisplayCellForRowAtIndexPath(这里可能更好)方法中放置一个断点,并查看哪个单元格的子视图的宽度大于应有的宽度。
【解决方案3】:

使用 View 查看 tableview 的约束。用不同颜色绘制单元格边框、标签边框和tableview边框,就可以知道哪些元素显示不正确。

例如:

#import <QuartzCore/QuartzCore.h>

...
cell.layer.border.width = 1;
cell.layer.border.color = [UIColor blackColor].CGColor;

【讨论】:

  • 嗨@tyt_g207,感谢您的回复,我用Xcode 6 视图调试中的两个屏幕截图更新了我的原始问题,这显示了同样的事情。您将看到的问题是模拟器运行的东西看起来与查看调试略有不同,我不知道为什么?
  • 这取决于您运行的目标。我想您已经固定了大小(在模拟指标中),以便内容不会自动拉伸。在你的程序中添加一些 NSLog() 来显示你的 View、TableView、Cells 的框架。有一个 API NSStringFromCGRect() 可以查看每个帧的大小。
【解决方案4】:

解决视图被裁剪的问题是取消选中自动布局中的“限制到边距”。

【讨论】:

    猜你喜欢
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    相关资源
    最近更新 更多