浮点视图的意思是自定义视图,它是scrollview的子视图(或看似是子视图),它滚动直到它锚定在某个点上。类似的行为是UITableView的节头。附上图片
我的内容视图(浮动视图下方的视图)不在tableview布局中。这意味着如果我仅将tableview用于浮动视图,我必须将我的内容视图放在1个巨型单元格中,或者将其拆分为具有不同布局的多个单元格。内容视图将有很多动态元素,这就是为什么我不想把它放在UITableViewCell里,除非我必须这样做。我可以在scrollview上以编程方式/使用autolayout创建浮动视图吗?
答案 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
以下是捕获: