Ios 如何制作浮动视图?
我所说的浮动视图是自定义视图,它是scrollview的一个子视图(或看起来是一个子视图),它一直滚动,直到锚定在某个点上。UITableView的节标题也会有类似的行为。附图片如下Ios 如何制作浮动视图?,ios,objective-c,swift,uitableview,autolayout,Ios,Objective C,Swift,Uitableview,Autolayout,我所说的浮动视图是自定义视图,它是scrollview的一个子视图(或看起来是一个子视图),它一直滚动,直到锚定在某个点上。UITableView的节标题也会有类似的行为。附图片如下 我的内容视图(浮动视图下的视图)不在tableview布局中。这意味着,如果我只对浮动视图使用tableview,我必须将我的内容视图放在一个大单元格内,或者将其拆分为具有不同布局的多个单元格。内容视图将有很多动态元素,这就是为什么我不想将其放在UITableViewCell中,除非我必须这样做。我可以通过编程/
我的内容视图(浮动视图下的视图)不在tableview布局中。这意味着,如果我只对浮动视图使用tableview,我必须将我的内容视图放在一个大单元格内,或者将其拆分为具有不同布局的多个单元格。内容视图将有很多动态元素,这就是为什么我不想将其放在UITableViewCell中,除非我必须这样做。我可以通过编程/使用scrollview上的autolayout创建浮动视图吗 使用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
//ScrollView.m
//ScrollView是UIScrollView的一个子类
@界面滚动视图()
@属性(非原子,强)UIView*floatingView;
@属性(非原子)CGRect原始边界框;
@属性(非原子)cGORHEIGHT;
@结束
@实现滚动视图
-(instancetype)initWithFrame:(CGRect)frame{
self=[super initWithFrame:frame];
如果(自我){
self.floatingView=[UIView new];
self.floatingView.backgroundColor=[uicolorWithred:0.8211绿色:0.5蓝色:0.5 alpha:1.0];
self.floatingView.frame=CGRectMake(0,150,frame.size.width,20);
self.originalBorderFrame=self.floatingView.frame;
[self addSubview:self.floatingView];
自锚地高度=44;
[self-addObserver:self-forKeyPath:@“contentOffset”选项:NSKeyValueObservingOptionNew-context:nil];
}
回归自我;
}
-(无效)解除锁定{
[self-removeObserver:self-forKeyPath:@“contentOffset”];
}
-(void)observeValueForKeyPath:(NSString*)对象的键路径:(id)对象更改:(NSDictionary*)更改上下文:(void*)上下文{
if([keyPath IsequalString:@“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));
}
}
}
@结束
以下是截图:
使用tableview部分标题可能是最好的解决方案,您可以随时轻松地自定义单元格数量或单元格本身,以实现特定布局 但是如果你确实不想处理tableview,这个组件看起来很酷,它实际上是要添加到tableview中的,但是我用twitter的例子测试了它,你可以将它添加到scrollview中,所以你不需要一个table view,它可以工作,给制作它的人道具
希望这有帮助,如果您有任何问题,请发表评论,祝您好运。这是一个主要基于意见的问题,请报告有关您问题的更多详细信息。我以前也遇到过,我的经验是使用自动布局似乎不太好,有时会有一些延迟动画,我使用KVO,这会更好。顺便说一句,使用表视图更容易,正如您所说的“我不需要页面的表视图”,但从技术上讲,您排除了使用浮动节标题的明显解决方案,并且没有显示出任何其他解决方案的努力,你刚才在这里放弃了一个要求,让别人或者其他人来解决你的问题——这不是在这里提出问题的方式。@holex我的措辞很糟糕。我确实解释了为什么我不喜欢使用tableview。我知道如何使用浮动节标题,我想知道是否有更好的选择。我确实尝试过提出其他的解决方案,征求建议,之前的评论者认为这是一个基于意见的问题,这就是为什么我编辑成“如何”问题的原因。谢谢你的建议,我是新来的,还在学习如何正确提问:)