我试图检查传递给ViewController的字典是否有指向图像的链接。 如果它有一个链接,我想显示图片,使用AlamofireImage。从UIScrollView中删除子视图并更新视图
如果没有,那么简单地从滚动视图中删除的UIImageView,所以下面的图片中的其他项目将坚持在屏幕的顶部。
这里的设置:
的UIScrollView
- > UIView的
- >的UIImageView
- >的UILabel(标题为一些简短的文字)
- > UILabel(使得视图可滚动的内容的一些长文本)
我设置通过界面生成器和自动布局我的意见像这样:
的UIImageView:顶,左,右,下约束用1:高度的1纵横比宽度没有特别的高度/宽度
的UILabel:顶部(需要优先级)图像,顶部(高优先级)顶部布局导,右,左,下约束
第二的UILabel:顶,左,右,下约束
里面viewDidLoad中
if let imageURLString = item["imageLink"] as? String {
let imageURL = NSURL(string: imageURLString)!
image.af_setImageWithURL(imageURL, placeholderImage: nil, filter: nil, imageTransition: .CrossDissolve(2), runImageTransitionIfCached: true, completion: nil)
}
else {
self.image.removeFromSuperview()
self.scrollView.setNeedsLayout()
}
有了这个代码,当有一个链接,它加载图像,并显示一切良好,没有搞乱了滚动。但是从scrollView中删除它可以防止scrollView能够滚动。即使滚动条指示灯显示,视图“尝试”滚动,但一切都会被冻结!
您的回答有效。即使没有图像,将初始高度约束设置为低优先级也会执行该作业。我试图在设置图像之前和之后打印ScrollView和UIImageView的contentSize和约束。我在那里感兴趣的是,如果你没有在ImageView中放置图像,ImageView和ScrollView将不会有任何contentSize约束。你知道为什么会这样吗?即使我的ImageView的纵横比为1:1? – Mehrdadmaskull
其全部归因于内在内容大小。就像UILabel和UIButton根据其内容调整自己的大小一样,UIImageView也根据它将要保存的图像的大小自行调整大小。 内在内容大小对于标签和按钮非常有用,但对于UIImageView来说不太好。因为要设置为UIImageView的图像实际上可能大于屏幕大小,因此我们不希望图像视图与图像本身一样大。 –