水平scrollView / UIImageView布局问题

时间:2016-07-18 14:08:12

标签: uiscrollview uiimageview autolayout

目标:有一个滚动视图,显示可以水平滚动它们的uiimageviews(照片)数组

我理解这样做:将每个uiimageview的框架(CGRect)设置为滚动视图的高度和宽度,每个/custom/foo/:id值为0,并设置第一个imgViews <?php $query_product = mysql_query("SELECT * FROM products WHERE status = '1' AND language_parent_id = '0' AND id = '".$row_product_id['product_id']."' ORDER BY sort_order"); $row_product = mysql_fetch_array($query_product); $imageFile = HTTP_RESIM.'products/'.$row_product['image']; ?> <section class="flexslider"> <ul class="slides"> <?php $imageFile = HTTP_RESIM.'products/'.$row_product['image']; $query_resim = mysql_query("SELECT * FROM product_image WHERE product_id = '".$row_product['id']."' AND status = '1' ORDER BY sort_order"); while($row_product_resim = mysql_fetch_array($query_resim)){ ?> <?php $imageFile2 = HTTP_RESIM.'product_image/'.$row_product_resim['image']; ?> <li><?php echo "<a href=\"$imageFile2\" rel=\"fancybox-gallery\" ><img src=\"$imageFile\" /></a>"; ?> </li> <?php } ?> </ul> </section> 将值设置为0.对于之后的每个imgView,将scrollview的宽度添加到x值。理论上,这会将imgViews(照片)水平排列在一起,不允许任何垂直滚动或缩放,纯粹是水平照片查看器。

故事板设置:我在xib文件中创建了我的scrollview(它是一个自定义的uiCollectionViewCell),具有以下约束: - 单元格的顶部空间(0) - 到单元格的尾随空格(0) - 领先的空间到单元格(0) - 身高400 - 底部空间到视图(0)   - (见下文img)

布置UIImgViews:

y

我怀疑:我怀疑这个问题源于我指定的自动布局限制,但是(考虑到我问一个问题)不确定

如果有更好的方法(真的是正确的方法),请告诉我!我一直试图绕过这个问题几天。

感谢所有回复!谢谢阅读 Auto layout constraints

编辑#1 我尝试了设置setNeedsLayout&amp;的paulvs方法。 layoutIfNeeded在“for”循环之前,仍然没有运气。这是(在选择的三个图像中)第二张照片显示。看起来第一张和第二张照片都比内容视图更长,并且会将中间视图移动(Squished)。

Middle of scroll view (Photo #2 out of 3)

1 个答案:

答案 0 :(得分:0)

除了一些细节(可能导致问题)之外,您的代码看起来很好:

  1. 添加:

    view.setNeedsLayout()
    view.layoutIfNeeded()
    

    在访问scrollView的框架之前(一个好的地方将在for循环之前)。 这是因为在使用Autolayout时,如果在布局引擎执行传递之前访问视图的帧,则会得到不正确的帧大小/位置。

  2. 从for循环中删除这些行:

    scrollView.contentSize = CGSize(width: imgView.frame.width * CGFloat(index), height: scrollView.bounds.height)
    scrollView.setNeedsLayout()
    

    并将此行放在for循环之后(外部):

    scrollView.contentSize = CGSize(width: imgView.frame.width * CGFloat(currentImages.count), height: scrollView.bounds.height)