Ios 当UIScrollView滚动时,使静态UIView保持粘性 我有一个比设备高度长得多的滚动视图(图表:words) 在滚动视图的底部是一些具有不同背景颜色的底部内容(图表:法国印刷) 为了将底部内容与文字分开,我创建了一个1pt高的UIView作为边框(图:红线) 我有一个按钮,位于设备底部,在滚动视图之外(滚动视图是device.height-button.height)。此按钮的背景色与底部内容的背景色匹配

Ios 当UIScrollView滚动时,使静态UIView保持粘性 我有一个比设备高度长得多的滚动视图(图表:words) 在滚动视图的底部是一些具有不同背景颜色的底部内容(图表:法国印刷) 为了将底部内容与文字分开,我创建了一个1pt高的UIView作为边框(图:红线) 我有一个按钮,位于设备底部,在滚动视图之外(滚动视图是device.height-button.height)。此按钮的背景色与底部内容的背景色匹配,ios,objective-c,uiscrollview,Ios,Objective C,Uiscrollview,不同的背景颜色看起来很不稳定,没有什么东西将底部按钮与内容视图分开,因此,虽然底部内容不可见,但我希望边框是粘性的,并且看起来位于底部按钮上方(图:红线) 一个小提示:我在IB中使用AutoLayout,但是我为边界约束创建了一个IBOutlet,我可以在代码中轻松操作它 我将采取以下步骤: 将按钮置于滚动视图之外的视图中 将精彩的底部内容(我认为是Bender头部的图片)放在按钮所在的同一视图中,并将其约束到顶部、左侧和右侧边缘 将滚动视图内容插图的底部尺寸设置为等于底部内容视图的高度。这将告

不同的背景颜色看起来很不稳定,没有什么东西将底部按钮与内容视图分开,因此,虽然底部内容不可见,但我希望边框是粘性的,并且看起来位于底部按钮上方(图:红线)

一个小提示:我在IB中使用AutoLayout,但是我为边界约束创建了一个IBOutlet,我可以在代码中轻松操作它

我将采取以下步骤:

  • 将按钮置于
    滚动视图
    之外的视图中
  • 将精彩的底部内容(我认为是Bender头部的图片)放在按钮所在的同一视图中,并将其约束到顶部、左侧和右侧边缘
  • 将滚动视图内容插图的底部尺寸设置为等于底部内容视图的高度。这将告诉滚动视图,可以向下滚动到可滚动内容实际末端以下的像素数
  • UIScrollViewDelegate
    添加到滚动视图,该视图至少实现了
    scrollViewDidScroll(33;)
    。在此方法中,检查滚动内容的最底部位置。如果该位置落在您在步骤3中设置的底部内容插图中的某个位置,则拉伸或以其他方式垂直重新定位相同数量的底部内容
    如果我有时间,我会制作一个这样的样本。

    我首先想到的至少有两个简单的解决方案

    关键是找到交叉点:

    内容大小值,滚动视图上的红线从按钮下方出现或进入按钮下方

    选项1: 在按钮顶部添加另一条红线,当内容大小值接近交叉点时,在scrollViewDidScroll中隐藏/显示(隐藏属性)

    选项2:
    无论内容大小值是否接近交叉点,请删除约束并将红线的superview从scrollview更改为button或相反。为特定superview重新添加约束。显然,您需要在代码中这样做。

    这里有一个执行此任务的库:

    (它在示例中与UItableView一起工作,但实现基于UIScrollview)

    您必须通过更改逻辑来更新代码:
    这里的视图在顶部,但整个原则都在那里

    您可以创建两个边框。 第一个是滚动视图中底部内容顶部的动态边框。 第二个是滚动视图外按钮顶部的粘性边框

    当第一个边框可见时,应隐藏第二个边框。为此,您应该注册一个
    UIScrollViewDelegate
    。实现方法
    scrollViewDidScroll(:)
    。只需检查第一个边界是否在第二个边界之上。这可以通过以下方式实现:

    if firstBorder.frame.origin.y < scrollView.contentOffset.y + scrollView.frame.height {
        // firstBorder is on the screen, hide the secondBorder...
        secondBorder.hidden = true
    } else {
        secondBorder.hidden = false
    }
    
    如果firstBorder.frame.origin.y
    这对您来说可能不是100%正确,因为不清楚您的
    UIScrollView
    是否在按钮上方结束,或者它们是否重叠。如果边框隐藏得太早或太晚,请进行调整


    如果按钮是透明的,如果没有显示第一个边框,也应该隐藏它,因为它可能位于按钮下方。然后只需将行
    firstBorder.hidden=false
    firstBorder.hidden=true
    添加到代码中即可。

    该死,这主意太简单了!