带有图像视图、2 个标签、按钮的自动布局 - 标签在旋转后消失

Posted

技术标签:

【中文标题】带有图像视图、2 个标签、按钮的自动布局 - 标签在旋转后消失【英文标题】:Autolayout with image view, 2 labels, button - the labels disappear after rotating 【发布时间】:2014-04-25 19:04:14 【问题描述】:

在一个简单的test app for iPhone 中,我试图在图像视图中显示用户手机(通过 CocoaPods 使用 SDWebImage)、两个标签和一个“播放”按钮 - 每个 UI 元素都位于其他元素下方,如屏幕截图所示:

我在 Xcode 5 中使用 Autolayout 并在每个 UI 元素周围设置 20px,如屏幕截图所示(此处为 fullscreen):

我在ViewController.m 中的代码很简短:

- (void)viewDidLoad

    [super viewDidLoad];

    _firstName.text = @"Alex";
    _city.text      = @"Bochum";

    [_imageView setImageWithURL:[NSURL URLWithString:kAvatar]
               placeholderImage:[UIImage imageNamed:@"Male.png"]];

不幸的是,我的问题是旋转后两个标签都消失了:

为什么会这样?我花了很多时间试图弄清楚,也尝试为各种 UI 元素更改“内容拥抱优先级”和“内容压缩阻力优先级”......

【问题讨论】:

您有一些错误或缺少约束——看到故事板场景列表中圆圈中的那个红色小箭头了吗?单击该箭头以查看您遇到的错误并尝试修复它们。 谢谢,但我没有红色三角形in my app - 该屏幕截图是在创建测试应用程序的过程中拍摄的。在最终版本中,我没有红色三角形,但问题就在那里 【参考方案1】:

我通过将较低的“内容拥抱优先级”和“内容压缩阻力优先级”设置为图像视图(将所有内容设置为 250,此处为 fullscreen)和更高的标签和按钮(设置他们到750):

(同样对于图像视图,我已将模式更改为“Aspect Fill”并启用“Clip Subviews”)现在可以正常工作了:

作为 ios 编程新手,如果我的问题太简单了,我很抱歉,但似乎已经解决了它(移动 setImageWithURL:placeholderImage: 调用 viewDidAppear 没有)。也很抱歉在这个网页上出现了 5 次我的脸 - 该图像在测试应用中存在问题,所以我没有费心去寻找中性的。

【讨论】:

【参考方案2】:

您的约束没问题,这似乎是 SDWebImage 中的一个错误。在下载您想要的图像时,占位符会正确显示(标签可见)。但是,一旦下载了图像,在用您的图像替换占位符时会发生一些奇怪的事情,并且您的布局会变坏。如果你打电话

[_imageView setImageWithURL:[NSURL URLWithString:kAvatar];

而不是

[_imageView setImageWithURL:[NSURL URLWithString:kAvatar]
           placeholderImage:[UIImage imageNamed:@"Male.png"]];

它正在做它应该做的事情。

更新: 你需要打电话

    [_imageView setImageWithURL:[NSURL URLWithString:kAvatar]
           placeholderImage:[UIImage imageNamed:@"Male.png"]];

在 viewDidAppear 内使约束生效。所以这可能毕竟不是 SDWebImageBug :)

【讨论】:

谢谢 - 我已将 setImageWithURL:placeholderImage: 呼叫移至 viewDidAppear,但问题仍然存在。 啊,现在我明白了 :) 我克隆了您的项目并在情节提要中进行了这些更改:将标签和按钮的垂直压缩阻力设置为 1000,将 ImageView 设置为 750 ...这确保了第一件事收缩是图像视图而不是标签(由于压缩阻力与图像视图相同,旋转后它们的高度为 0)【参考方案3】:

1-我认为您的问题是您使用的是 3.5 英寸屏幕的模拟器,如果需要,请尝试使用 4 英寸屏幕或 ipad 模拟器。

2-我认为它们消失的原因是它们没有空间,尝试使 SDWebImage 更小。

3-如果您单击标签本身并转到第一个选项卡(文件检查器),也会在您的故事板中看到一个选项,上面写着使用 AutoLayuot 看看您是否已选中它,因为它可能是问题所在。

我希望这对你有帮助。

【讨论】:

很遗憾,我看不出您的建议有什么帮助:我希望我的应用程序可以与 3.5 英寸和 4 英寸 iPhone 一起使用,并且我正在使用问题中所述的自动布局

以上是关于带有图像视图、2 个标签、按钮的自动布局 - 标签在旋转后消失的主要内容,如果未能解决你的问题,请参考以下文章

使用带有自动布局的推送时隐藏按钮时,约束更新导致项目移动

自动布局等间距和加权间距

视图高度的AMBIGUOUS布局

如何使用自动布局来调整表格视图单元格中的视图大小?

如何使用自动布局来调整表格视图单元格中的视图?

如何使用堆栈视图自动布局标签和按钮?