具有图像视图的Autolayout,2个标签,按钮 - 旋转后标签消失

时间:2014-04-25 19:04:15

标签: ios iphone objective-c autolayout sdwebimage

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

app screenshot

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

Xcode 5 screenshot

ViewController.m中的代码简短明了:

- (void)viewDidLoad
{
    [super viewDidLoad];

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

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

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

landscape screenshot

portrait screenshot

为什么会这样?我花了很多时间试图解决这个问题,尝试改变各种UI元素的“内容拥抱优先级”和“内容压缩阻力优先级”......

3 个答案:

答案 0 :(得分:4)

通过降低内容拥抱优先级"我解决了我的问题。和"内容压缩阻力优先"到图像视图(将所有内容设置为250,此处为fullscreen)和更高 - 指向两个标签和按钮(将它们设置为750):

Xcode screenshot

(同样对于图像视图,我已将模式更改为" Aspect Fill"并启用"剪辑子视图")现在它可以正常工作:

portrait screenshot

landscape screenshot

作为iOS编程新手,我很抱歉,如果我的问题过于简单,但似乎解决了这个问题(移动setImageWithURL:placeholderImage:调用viewDidAppear没有)。也很抱歉在这个网页上有我的脸5次 - 该图片在测试应用程序中有问题,所以我没有费心去搜索中性的。

答案 1 :(得分:0)

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

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

3 - 如果您单击标签本身并转到第一个选项卡(文件检查器),您也可以看到一个选项,说明使用AutoLayuot,看看您是否已选中,因为它可能是问题所在。

我希望这会对你有所帮助。

答案 2 :(得分:0)

你的约束没问题,这似乎是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毕竟:)