¿Cómo hacer una vista flotante?

Lo que quiero decir con vista flotante es una vista personalizada que es una subvista (o parece ser una subvista) de scrollview que se desplaza hasta que se ancla en un punto determinado. Un comportamiento similar sería el encabezado de sección de UITableView. Adjunta la image a continuación

imagen de vista flotante

Mi vista de contenido (la vista debajo de la vista flotante) no está en el layout de vista de tabla. Es decir, si uso tableview solo para la vista flotante, tengo que poner mi vista de contenido dentro de 1 celda gigante o dividirla en varias celdas con layouts diferentes. La vista de contenido tendrá una gran cantidad de elementos dynamics, por lo que no quiero ponerlo dentro de UITableViewCell a less que tenga que hacerlo. ¿Puedo hacer vista flotante mediante progtwigción / usando autolayout en scrollview?

Usando el encabezado de la sección tableview es probablemente la mejor solución, siempre puede personalizar fácilmente el número de celdas o células para lograr un layout en particular.

Sin embargo, si definitivamente no quieres lidiar con una vista de tabla, este componente parece genial, en realidad está destinado a agregarse a una vista de tabla, pero lo probé con el ejemplo de Twitter y puedes agregarlo a una vista de desplazamiento, por lo que no necesitas una vista de tabla y funcionará, da puntales al tipo que lo creó. GSKStretchyHeaderView

Espero que esto ayude, comenta si tienes alguna pregunta, buena suerte.

Use KVO para actualizar el marco de la vista flotante.

Aquí está el código de ejemplo escrito en 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 

Aquí está la captura:

introduzca la descripción de la imagen aquí