2

我尝试在UITableview. 这样当内容滚动时,按钮保持在同一位置。按钮应保持透明图像。

我做了一个smoketest,它insertSubview:aboveSubview:分别工作得很好addSubView

但是在 aUITableview上执行此TableViewController操作似乎不起作用。Button 位于 tableView 上并随 tableView 滚动。有趣的是,它也在 tableView 的标题下滚动......

我该如何解决这个问题 - 按钮浮动在 tableview 上?

TableViewController.m(使用工作代码 12.07.2013 更新)

编辑@property (nonatomic) float originalOrigin;在 TableViewController.h 中添加了一个

- (void)viewDidLoad
{
    [super viewDidLoad];       
    self.originalOrigin = 424.0;
    [self addOverlayButton];
}


#pragma mark Camera Button 
- (void)addOverlayButton {
    // UIButton *oButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    self.oButton = [UIButton buttonWithType:UIButtonTypeCustom];
    self.oButton.frame = CGRectMake(132.0, self.originalOrigin, 56.0, 56.0);
    self.oButton.backgroundColor = [UIColor clearColor];
    [self.oButton setImage:[UIImage imageNamed:@"CameraButton56x56.png"] forState:UIControlStateNormal];
    [self.oButton addTarget:self action:@selector(toCameraView:) forControlEvents:UIControlEventTouchDown];
    [self.view insertSubview:self.oButton aboveSubview:self.view];
}

// to make the button float over the tableView including tableHeader
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGRect tableBounds = self.tableView.bounds;
    CGRect floatingButtonFrame = self.oButton.frame;
    floatingButtonFrame.origin.y = self.originalOrigin + tableBounds.origin.y;
    self.oButton.frame = floatingButtonFrame;

    [self.view bringSubviewToFront:self.oButton]; // float over the tableHeader
}
4

1 回答 1

2

您可以实现scrollViewDidScroll委托以在用户滚动表格时更改浮动按钮的原点,以便按钮浮动并保持在同一位置。

WWDC 2011 session 125中有一个很好的例子,它完全符合您的要求。

一般来说,你需要在创建按钮后保存原始的y原点,或者你可以在 中进行viewDidLoad,然后实现scrollViewDidScroll并更新按钮框架。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGRect tableBounds = self.tableView.bounds;
    CGRect floatingButtonFrame = self.floatingButton.frame;
    floatingButtonFrame.origin.y = self.originalOrigin + tableBounds.origin.y;
    self.floatingButton.frame = floatingButtonFrame;
}
于 2013-07-11T13:29:20.790 回答