【问题标题】:How do I adjust a UIRefreshControl's position in my view hierarchy?如何调整 UIRefreshControl 在视图层次结构中的位置?
【发布时间】:2015-09-10 05:20:21
【问题描述】:

我有一个自定义的 UIRefreshControl “拉动刷新”,由于某种原因,当我开始滚动时,视图出现在所有其他视图之上,而不是随着滚动被向下拖动而逐渐显示自己。这就是我的意思:

现在我试图通过在 viewDidLoad 中使背景和色调颜色清晰来解决这个问题:

    var refreshControl: UIRefreshControl!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        refreshControl = UIRefreshControl()
        refreshControl.backgroundColor = UIColor.clearColor()
        refreshControl.tintColor = UIColor.clearColor()
        collectionView?.addSubview(refreshControl)

    }

虽然这确实解决了刷新只是覆盖所有内容的问题,但无论其透明度如何,refreshControl 仍然位于我的视图层次结构之上,您可以看到当我释放滚动条时,字母仍然挂在视图..虽然它确实隐藏了视图,但当您开始拖动滚动条时,再次显示视图时会出现非常快的故障:

现在我什至尝试调用sendSubviewToBackinsertSubview:aboveSubview: 方法,但它们什么也没做。请记住,这是一个collectionViewController,而不是顶部有collectionView 的UIViewController,所以我猜没有'不是顶视图后面的视图,我可以将一些东西发送到后面..但是我可以实现任何逻辑来在滚动开始时调整视图边界吗?

【问题讨论】:

    标签: ios xcode swift uicollectionview uirefreshcontrol


    【解决方案1】:

    试试这个:

    refreshControl.layer.zPosition = -1
    

    另外,在使用UIRefreshControl 时要小心,不要将其附加到实际的UITableViewController。您可能会看到奇怪的伪影,例如口吃(即使将其附加到 UITableView 也会导致错误)。见:

    UIRefreshControl without UITableViewController

    【讨论】:

    • 当我将它作为子视图添加到我的背景时,它就消失了,我的意思是控件的动作仍然存在,但它不可见
    • 我可以处理将 RefreshControl 的 backgroundColor 和 tintColor 设置为在 viewDidLoad 中清除以正确伪装自己,但是我能做些什么来处理突然的瞬间故障,它会否定此代码并在滚动时显示自己开始拖动了吗?
    • 我能做些什么来防止这种情况发生?
    • @ItzhakIra 你有示例代码,或者问题的视频/gif 吗?
    • 我认为最好将其添加到您的原始问题中,或在此处链接到它(例如,使用 Dropbox 的公共 URL)。
    猜你喜欢
    • 2017-07-11
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    相关资源
    最近更新 更多