Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何制作浮动视图?_Ios_Objective C_Swift_Uitableview_Autolayout - Fatal编程技术网

Ios 如何制作浮动视图?

Ios 如何制作浮动视图?,ios,objective-c,swift,uitableview,autolayout,Ios,Objective C,Swift,Uitableview,Autolayout,我所说的浮动视图是自定义视图,它是scrollview的一个子视图(或看起来是一个子视图),它一直滚动,直到锚定在某个点上。UITableView的节标题也会有类似的行为。附图片如下 我的内容视图(浮动视图下的视图)不在tableview布局中。这意味着,如果我只对浮动视图使用tableview,我必须将我的内容视图放在一个大单元格内,或者将其拆分为具有不同布局的多个单元格。内容视图将有很多动态元素,这就是为什么我不想将其放在UITableViewCell中,除非我必须这样做。我可以通过编程/

我所说的浮动视图是自定义视图,它是scrollview的一个子视图(或看起来是一个子视图),它一直滚动,直到锚定在某个点上。UITableView的节标题也会有类似的行为。附图片如下


我的内容视图(浮动视图下的视图)不在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。我知道如何使用浮动节标题,我想知道是否有更好的选择。我确实尝试过提出其他的解决方案,征求建议,之前的评论者认为这是一个基于意见的问题,这就是为什么我编辑成“如何”问题的原因。谢谢你的建议,我是新来的,还在学习如何正确提问:)