【问题标题】:UIImageView under UIScrollview does not fit on top screenUIScrollview 下的 UIImageView 不适合顶部屏幕
【发布时间】: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 中计算框架。
  • 我也遇到了同样的问题并尝试使用layoutSubviewssetNeedsLayoutlayoutIfNeeded。没用。然后我删除了带有水平滚动的collectionView 的滚动视图。
  • 我认为你需要在 viewWillLayoutSubviews 中更新宽度。

标签: ios iphone swift uiscrollview uiimageview


【解决方案1】:

简而言之,视图可能没有更新 viewDidLoad 或 ViewWillAppear 方法的框架,而是使用故事板大小初始化视图。所以你没有得到 iPhone 7 或其他设备的更新矩形。 另一个原因是滚动视图会自动调整它的子视图。所以在 viewDidLoad() 上禁用它。

override func viewDidLoad() {
    super.viewDidLoad()
    self.scroll.contentInsetAdjustmentBehavior = .never;

    // write your code

  }

您应该像之前那样在 viewDidLoad() 方法上添加子视图,并在 viewDidLayoutSubviews() 上更新与框架和滚动视图内容相关的更改。

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews();
    for view:UIView in self.scroll.subviews {
        frame.origin.x = self.scroll.frame.size.width * CGFloat(self.scroll.subviews.index(of: view)!);
        frame.size = scroll.frame.size
        view.frame = frame;
    }

    self.scroll.contentSize = CGSize(width: scroll.frame.size.width * selectedEvent.album?.count , height: scroll.frame.size.height)
}

希望会成功。

【讨论】:

    【解决方案2】:

    您希望框架宽度为屏幕宽度。用作:

    let size = UIScreen.main.bounds.size
    
    self.scroll.contentSize = CGSize(width: size.width, height: scroll.frame.size.height)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 2018-12-04
      • 2013-09-23
      • 2017-05-20
      • 2016-05-25
      相关资源
      最近更新 更多