Ho un UIScrollView aggiunto dinamicamente alla vista principale e lo sto riempiendo con piccoli oggetti UIView. Sto impostando il suo contenuto su qualcosa di più grande della risoluzione del dispositivo, ma non posso scorrerlo fino a quando non cambio l'orientamento del dispositivo.UIScrollView non scorre fino all'orientamento
Come posso farlo scorrere prima del cambio di orientamento?
modificare in seguito:
mi sono reso conto che il problema deriva da alcune subviews che sto aggiungendo, più precisamente dal l'aggiunta di alcuni vincoli per quei subviews:
Ecco il codice dove sto aggiungendo il subviews (il metodo viene chiamato circa 10-20 volte):
-(void) addShelve:(NSInteger) index
{
FSShelf *shelf = [[FSShelf alloc] initWithFrame:CGRectMake(0, index * [FSConstants getShelfVerticalDistance], 0, 0)];
[shelves addObject:shelf];
[shelfView addSubview:shelf];
[shelf addShelfConstraints];
}
FSShelf è una sottoclasse di UIView e shelfView è il mio sottoclasse di UIScrollView.
E qui sono i vincoli aggiunti al addShelfContraints
:
[self.superview addConstraint:[FSUtils getWidthConstraintFor:self.superview with:self constant: -2 * ([FSConstants getShelveMargin])]];
[self addConstraint:[FSUtils getSelfHeightConstraintFor:self constant:30]];
[self.superview addConstraint:[FSUtils getCenterXConstraintFor:self.superview with:self constant:0]];
I metodi della classe FSUtils per l'aggiunta di vincoli:
+ (NSLayoutConstraint *)getSelfHeightConstraintFor:(UIView *)view constant:(CGFloat)constant
{
NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:view
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:constant];
return constraint;
}
+ (NSLayoutConstraint *)getCenterXConstraintFor:(UIView *)superView with:(UIView *)subView constant:(CGFloat)constant
{
NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:subView
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:superView
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:constant];
return constraint;
}
+ (NSLayoutConstraint *)getWidthConstraintFor:(UIView *)superView with:(UIView *)subView constant:(CGFloat)constant
{
NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:subView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:superView
attribute:NSLayoutAttributeWidth
multiplier:1.0
constant:constant];
return constraint;
}
cosa si nota qualcosa di sbagliato con quei vincoli?
Puoi fornirci qualche dettaglio in più sulla configurazione? Quando viene inizializzato UIScrollView? Il frame della vista di scorrimento è più piccolo del suo contentSize (prima della rotazione)? Il modo più semplice che posso immaginare per colpire il tuo bug è che la cornice della vista di scorrimento sia troppo grande. –
Lo scrollView ha i vincoli per essere 100% larghezza e (100% - 50px altezza). Ho controllato la dimensione del contenuto e l'altezza è superiore a 2000 px. Sto inizializzando UIScrollView su un evento singleTap, quando sto sostituendo il contenuto della vista principale (rimuovendo uniview e aggiungendo la scrollview). Pubblicherò un po 'di codice più tardi oggi quando torno al progetto. – gabitzish
per favore pubblica il tuo codice relativo al tuo UIScrollView. – Hiren