【问题标题】:How to implement a overlay button which is floating over the content view如何实现浮动在内容视图上的覆盖按钮
【发布时间】:2026-01-08 02:30:01
【问题描述】:

在某些 iPhone 应用程序中,我看到了一个 按钮,它悬浮在内容视图上,例如。在应用 EyeEm 中。当用户滚动内容时,按钮保持在原处并且​​仍然是交互元素。

我该如何实现呢?

我的做法是:

  • 创建包含内容的视图
  • 在上面放一个按钮
  • 但是如何让按钮浮动呢?

编辑:

浮动似乎是默认行为。有趣的是,addSubviewinsertSubview 在放置按钮时具有相同的行为......两者都漂浮在内容上。

- (void)addOverlayButton {
UIButton *oButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[oButton addTarget:self
           action:@selector(aMethod:)
           forControlEvents:UIControlEventTouchDown];
[oButton setTitle:@"Show View" forState:UIControlStateNormal];
oButton.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
[self.view addSubview:oButton];
//[self.view insertSubview:oButton aboveSubview:_scrollView];  // same result as addSubview. 
// Both solutions let the button float over the content. 
}

【问题讨论】:

    标签: objective-c xcode button overlay floating


    【解决方案1】:

    使用insertSubview:aboveSubview: 方法将子视图添加到窗口的内容视图,并将按钮和滚动视图作为参数,但要小心:如果两个同级视图都具有透明度,则生成的绘图行为是未定义的。

    【讨论】:

    • addSubview 似乎默认具有浮动行为。请参阅我更新的问题
    【解决方案2】:

    如果您使用故事板,只需在其上添加按钮,例如

    如果你想使用代码insertSubview:buttonView aboveSubview:scrollView

    不管是表格还是滚动视图

    【讨论】:

    • 确实有效,如果在内容区域中的所有内容都是由情节提要创建的。但是我有以编程方式创建的内容,在这种情况下,按钮没有显示。我假设他隐藏在程序内容之下。也许我必须以某种方式抬起按钮,以便该层位于编程内容之上。