【发布时间】:2018-03-29 23:14:57
【问题描述】:
我将 UIImageView 放置在 UIScrollView 下的屏幕上,其宽度与屏幕相同,它在 iphone 5s 上运行良好,但在 iphone 7 或 8 上,图像尺寸小于屏幕截图上共享的屏幕尺寸宽度。
这是我的代码:
let x = CGFloat(selectedEvent.album?.count ?? 0)
pageControl.numberOfPages = (selectedEvent.album?.count ?? 0)
for index in 0..<(selectedEvent.album?.count ?? 0) {
frame.origin.x = scroll.frame.size.width * CGFloat(index)
frame.size = scroll.frame.size
print(self.frame.size.width)
print(scroll.frame.size.width)
print(frame.size.width)
let image = UIImageView(frame: frame)
image.contentMode = .scaleToFill
print(image.frame.size.width)
if (selectedEvent.album?.count ?? 0) > 0 {
selectedEvent.getAlbumImage(key: selectedEvent.album![index], completion: { (gotImage:UIImage) in
image.image = gotImage
})
} else {
image.image = UIImage(named: "defaultImage.jpg")
}
scroll .addSubview(image)
}
self.scroll.contentSize = CGSize(width: scroll.frame.size.width * x, height: scroll.frame.size.height)
pageControl.addTarget(self, action: #selector(self.changePage(sender:)), for: UIControlEvents.valueChanged)
这是打印日志
320.0
320.0
320.0
320.0
320.0
320.0
320.0
320.0
【问题讨论】:
-
不要用户滚动视图宽度,使用 [UIScreen mainScreen].bounds.size.width;并在 ViewWillAppear 或 ViewDidAppear 中计算框架。
-
我也遇到了同样的问题并尝试使用
layoutSubviews、setNeedsLayout和layoutIfNeeded。没用。然后我删除了带有水平滚动的collectionView的滚动视图。 -
我认为你需要在 viewWillLayoutSubviews 中更新宽度。
标签: ios iphone swift uiscrollview uiimageview