如何制作浮动视图?

时间:2016-07-14 09:48:44

标签: ios objective-c swift uitableview autolayout

浮点视图的意思是自定义视图,它是scrollview的子视图(或看似是子视图),它滚动直到它锚定在某个点上。类似的行为是UITableView的节头。附上图片

floating view image

我的内容视图(浮动视图下方的视图)不在tableview布局中。这意味着如果我仅将tableview用于浮动视图,我必须将我的内容视图放在1个巨型单元格中,或者将其拆分为具有不同布局的多个单元格。内容视图将有很多动态元素,这就是为什么我不想把它放在UITableViewCell里,除非我必须这样做。我可以在scrollview上以编程方式/使用autolayout创建浮动视图吗?

2 个答案:

答案 0 :(得分:2)

使用tableview部分标题可能是最好的解决方案,您可以随时轻松自定义单元格或单元格的数量,以实现特定的布局。

但是如果你绝对不想处理tableview,这个组件看起来真的很酷,它实际上是要添加到tableview中,但是我用twitter示例测试了它,你实际上可以将它添加到一个滚动视图,所以你不需要一个表视图,它将工作,给道具制作它的人。 GSKStretchyHeaderView

希望这有帮助,如果您有任何疑问,请发表评论,祝您好运。

答案 1 :(得分:0)

使用KVO更新浮动视图的框架。

以下是用Objective-C编写的示例代码:

// ScrollView.m
// ScrollView is a subclass of UIScrollView

@interface ScrollView ()

@property (nonatomic, strong) UIView *floatingView;
@property (nonatomic) CGRect originalBorderFrame;
@property (nonatomic) CGFloat anchorHeight;

@end

@implementation ScrollView


- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];

    if (self) {
        self.floatingView = [UIView new];
        self.floatingView.backgroundColor = [UIColor colorWithRed:0.8211 green:0.5 blue:0.5 alpha:1.0];
        self.floatingView.frame = CGRectMake(0, 150, frame.size.width, 20);
        self.originalBorderFrame  = self.floatingView.frame;
        [self addSubview:self.floatingView];

        self.anchorHeight = 44;

        [self addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil];
    }

    return self;
}

- (void)dealloc {
    [self removeObserver:self forKeyPath:@"contentOffset"];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
    if ([keyPath isEqualToString:@"contentOffset"]) {
        if (self.contentOffset.y > self.originalBorderFrame.origin.y-self.anchorHeight) {
            self.floatingView.frame = CGRectOffset(self.originalBorderFrame, 0, self.contentOffset.y - (self.originalBorderFrame.origin.y-self.anchorHeight));
        }
    }
}
@end

以下是捕获:

enter image description here