滚动视图位置中的 UIButton 意外

Posted

技术标签:

【中文标题】滚动视图位置中的 UIButton 意外【英文标题】:UIButton in scrollView position unexpected 【发布时间】:2015-08-08 23:00:41 【问题描述】:

我从 UIView 创建了一个非常简单的自定义类。在顶部有一个 UIScrollView。在 UIScrollView 中,我放置了几个按钮。按钮位置不在滚动视图中。

这里是代码。

class TestView: UIView 

    var tabView: UIScrollView = UIScrollView()
    var buttons = [UIButton]()
    var tabHeight: CGFloat = 40.0
    let screenWidth: CGFloat = UIScreen.mainScreen().bounds.width
    var titles = [String]()
    var numberOfTitles = 0

    required init(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)

        self.addSubview(tabView)
    

    func createUI() 
        tabView.frame = CGRect(x: 0, y: 0, width: screenWidth, height: tabHeight)
        tabView.backgroundColor = UIColor.grayColor()
        tabView.contentSize = CGSize(width: screenWidth, height: tabHeight)

        numberOfTitles = titles.count

        for var i = 0; i < numberOfTitles; ++i 
            var button = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton
            button.frame = CGRect(x: 50.0*CGFloat(i), y: 0, width: 50.0, height: tabHeight)
            button.setTitle(titles[i], forState: UIControlState.Normal)
            button.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
            tabView.addSubview(button)
        
    

这是我调试视图层次结构时的样子。

但是如果我只是把UIScrollView改成UIView,如下,

var tabView: UIView = UIView()

那么按钮位置是正确的,如下所示。

我不知道为什么。请帮忙。谢谢!

【问题讨论】:

【参考方案1】:

这是因为UIScrollView 本身只能滚动容器视图。您需要做的是像最初一样初始化UIScrollView,但不是将所有组件添加到滚动视图,而是创建一个名为conatinerView 的新UIView,将所有tabView 更改为containerView,然后将required init 更改为:

required init(coder aDecoder: NSCoder) 
    super.init(coder: aDecoder)

    self.addSubview(tabView)
    tabView.addSubview(containerView)

但请确保containerView 的帧大小正确,原点也是正确的。

【讨论】:

对不起,这不是原因。我发现了问题。视图控制器嵌入在导航控制器中。默认情况下,选择“调整滚动视图昆虫”。如果我取消选择此选项,原始代码将起作用。感谢您的帮助。

以上是关于滚动视图位置中的 UIButton 意外的主要内容,如果未能解决你的问题,请参考以下文章

当 UIScrollView 在可见视图之外滚动按钮时更改 UIButton textLabel 位置

如何在UIScrollView上进行UIButton修复?

swift中滚动视图中的意外视图

如何使用 ios 中的约束使视图位置动态化?

滚动视图内的UIButton不可单击

滚动列表时视图意外更改