【问题标题】:UIButton not showing when UIScrollView showing on ViewController当 UIScrollView 在 ViewController 上显示时 UIButton 不显示
【发布时间】:2016-12-15 19:14:59
【问题描述】:

我有一个 UIViewController 附加到一个类,下面的 Swift 代码。该代码基本上是在 View Controller 中添加了一个带有图像的 UIScrollView

我想将UIButton 添加到ViewController,我可以通过代码来完成,但是在这种情况下,我想使用情节提要将UIButton 添加到ViewController

当我添加UIButton 然后运行我的项目时,UIButton 不可见,只有UIScrollView 可见。

问题:

这是怎么回事,为什么UIButton 不可见?当我运行项目时,如何添加UIButton(到情节提要)并确保它可见并位于UIScrollView(以编程方式创建)的前面?


class ScrollViewController: UIViewController, UIScrollViewDelegate {
    var scrollView: UIScrollView!
    var imageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        imageView = UIImageView(image: UIImage(named: "image.png"))

        scrollView = UIScrollView(frame: view.bounds)
        scrollView.backgroundColor = UIColor.blackColor()
        scrollView.contentSize = imageView.bounds.size
        scrollView.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]

        scrollView.contentOffset = CGPoint(x: 1000, y: 450)

        scrollView.addSubview(imageView)
        view.addSubview(scrollView)

        scrollView.delegate = self
        setZoomScale()
        setupGestureRecognizer()
    }

    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
        return imageView
    }

    override func viewWillLayoutSubviews() {
        setZoomScale()
    }

    func setZoomScale() {
        let imageViewSize = imageView.bounds.size
        let scrollViewSize = scrollView.bounds.size
        let widthScale = scrollViewSize.width / imageViewSize.width
        let heightScale = scrollViewSize.height / imageViewSize.height

        scrollView.minimumZoomScale = min(widthScale, heightScale)
        scrollView.zoomScale = 1.0
    }

    func scrollViewDidZoom(scrollView: UIScrollView) {
        let imageViewSize = imageView.frame.size
        let scrollViewSize = scrollView.bounds.size
        let verticalPadding = imageViewSize.height < scrollViewSize.height ? (scrollViewSize.height - imageViewSize.height) / 2 : 0
        let horizontalPadding = imageViewSize.width < scrollViewSize.width ? (scrollViewSize.width - imageViewSize.width) / 2 : 0

        scrollView.contentInset = UIEdgeInsets(top: verticalPadding, left: horizontalPadding, bottom: verticalPadding, right: horizontalPadding)
    }

    func setupGestureRecognizer() {
        let doubleTap = UITapGestureRecognizer(target: self, action: "handleDoubleTap:")
        doubleTap.numberOfTapsRequired = 2
        scrollView.addGestureRecognizer(doubleTap)
    }

    func handleDoubleTap(recognizer: UITapGestureRecognizer) {
        if (scrollView.zoomScale > scrollView.minimumZoomScale) {
            scrollView.setZoomScale(scrollView.minimumZoomScale, animated: true)
        } else {
            scrollView.setZoomScale(scrollView.maximumZoomScale, animated: true)
        }
    }
}

【问题讨论】:

  • 您是否正确设置了按钮约束以确保您没有任何冲突?
  • 是的,我设置了宽度,高度,并居中,没有冲突。当我运行该项目并缩小UIScrollView 时,我可以看到UIButton,但它在UIScrollView 后面而不是在前面。

标签: ios swift optimization uiscrollview uibutton


【解决方案1】:

您的滚动视图挡住了 z 轴上的 UIButton,请使用

- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;

在 UIButton 下方插入滚动视图

斯威夫特:

func insertSubview(view: UIView, atIndex index: Int) {
}

答案:

您需要使用self.view.insertSubview(scrollView, atIndex: 0) 而不是这行view.addSubview(scrollView),并确保UIButton 高于scrollView

【讨论】:

  • UIButton 是在 Storyboard 上创建的,UIScrollView 是在代码中创建的。我已经在 Swift 中复制了上面的代码,但它似乎没有做任何事情。有没有具体应该放的地方?
  • 代替这一行 view.addSubview(scrollView),你需要做 self.view.insertSubview(scrollView, atIndex: 0) 并确保 UIButton 在 scrollView 上方。
【解决方案2】:

你必须写:

self.view.insertSubview(scrollview, belowSubview: button)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多