2016-01-06 6 views
0

Я не уверен, что не так с моим кодом. Я встроил UIView внутри UIScrollView. Есть некоторые элементы управления, встроенные внутри этого UIView. Я ожидаю, что прокрутка произойдет для UIView, но это не так. В конце концов я не могу просмотреть все элементы управления. Я просто вставляю свой код ниже. Цените, если кто-то укажет, чего я здесь не вижу.Вертикальная прокрутка не работает UIScrollView программно

UIView *parentView = [[UIView alloc]init]; 
[parentView setTranslatesAutoresizingMaskIntoConstraints:NO]; 
parentView.backgroundColor = [UIColor whiteColor]; 

[self.view addSubview: parentView]; 


NSArray *parentViewHConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[parentView(==mainView)]" options:0 metrics:0 views:@{@"parentView": parentView, @"mainView":self.view}]; 
NSArray *parentViewVConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[parentView]-10-|" options:0 metrics:0 views:@{@"parentView": parentView}]; 
[self.view addConstraints:parentViewHConstraints]; 
[self.view addConstraints:parentViewVConstraints]; 


self.myScrollView = [[UIScrollView alloc] init]; 
//CGSize scrollableSize = CGSizeMake(100, 200); 
//[self.myScrollView setContentSize:scrollableSize]; 
[parentView addSubview:self.myScrollView]; 
self.myScrollView.backgroundColor = [UIColor lightGrayColor]; 
self.myScrollView.translatesAutoresizingMaskIntoConstraints = NO; 


NSArray *scrollViewHContraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics:0 views:@{@"scrollView": self.myScrollView}]; 
[parentView addConstraints:scrollViewHContraints]; 


UIView *contentView = [[UIView alloc]init]; 
contentView.translatesAutoresizingMaskIntoConstraints = NO; 
[self.myScrollView addSubview:contentView]; 
self.myScrollView.showsVerticalScrollIndicator = YES; 
self.myScrollView.pagingEnabled = YES; 
self.myScrollView.contentSize = CGSizeMake(510,221); 

NSArray *contentViewHConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[contentview(==scrollView)]|" options:0 metrics:nil views:@{@"contentview": contentView,@"scrollView": self.myScrollView}]; 
NSArray *contentViewVConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentview(==scrollView)]|" options:0 metrics:nil views:@{@"contentview": contentView,@"scrollView": self.myScrollView}]; 

[self.myScrollView addConstraints:contentViewHConstraints]; 
[self.myScrollView addConstraints:contentViewVConstraints]; 





UIFont *headingFont = [UIFont fontWithName:@"Helvetica Neue" size:40]; 

self.m_ObjTopHeadingLbl = [[UILabel alloc]init]; 
[self.m_ObjTopHeadingLbl setText:@"Registration"]; 
self.m_ObjTopHeadingLbl.font = headingFont; 
[self.m_ObjTopHeadingLbl setTextColor:[UIColor redColor]]; 
self.m_ObjTopHeadingLbl.translatesAutoresizingMaskIntoConstraints = NO; 
[contentView addSubview:self.m_ObjTopHeadingLbl]; 


NSArray *topHeadingHorzConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[registView]-|" options:0 metrics:nil views:@{@"registView": self.m_ObjTopHeadingLbl}]; 
[contentView addConstraints:topHeadingHorzConstraint]; 

// Name field 
self.m_ObjNameField = [[JVFloatLabeledTextField alloc]init]; 
self.m_ObjNameField.borderStyle = UITextBorderStyleRoundedRect; 

self.m_ObjNameField.translatesAutoresizingMaskIntoConstraints = NO; 
self.m_ObjNameField.placeholder = [NSString stringWithFormat:@"Enter your short name"]; 
[contentView addSubview:self.m_ObjNameField]; 


NSArray *nameFieldHorzConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[nameFieldView]-|" options:0 metrics:nil views:@{@"nameFieldView": self.m_ObjNameField}]; 
[contentView addConstraints:nameFieldHorzConstraint]; 


// Info on the name field 
UILabel* nameFieldLbl = [[UILabel alloc]init]; 
[nameFieldLbl setText:@"Will be visible to all on ipomo"]; 
UIFont *nameFieldLblFont = [UIFont fontWithName:@"Arial-BoldMT" size:13]; 
[nameFieldLbl setFont:nameFieldLblFont]; 
[nameFieldLbl setTextColor:[UIColor grayColor]]; 
nameFieldLbl.translatesAutoresizingMaskIntoConstraints = NO; 
[contentView addSubview:nameFieldLbl]; 

NSArray *nameFieldlblHorzConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[nameFieldLbl]-|" options:0 metrics:nil views:@{@"nameFieldLbl": nameFieldLbl}]; 
[contentView addConstraints:nameFieldlblHorzConstraint]; 

// Mobilenumber field 
self.m_ObjMobNo = [[JVFloatLabeledTextField alloc]init]; 
    self.m_ObjMobNo.borderStyle = UITextBorderStyleRoundedRect; 
self.m_ObjMobNo.translatesAutoresizingMaskIntoConstraints = NO; 
self.m_ObjMobNo.placeholder = [NSString stringWithFormat:@"Enter your mobilenumber"]; 
[contentView addSubview:self.m_ObjMobNo]; 



NSArray *mobnoFieldHorzConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[mobnoField]-|" options:0 metrics:nil views:@{@"mobnoField": self.m_ObjMobNo}]; 
[contentView addConstraints:mobnoFieldHorzConstraint]; 

// Info on the mobile number field 
UILabel* mobnoFieldLbl = [[UILabel alloc]init]; 
[mobnoFieldLbl setText:@"To send you the activation code. Hidden and secure"]; 
dispatch_async(dispatch_get_main_queue(), ^{ 
    mobnoFieldLbl.preferredMaxLayoutWidth = self.view.bounds.size.width; 
}); 
UIFont *mobnoFieldLblFont = [UIFont fontWithName:@"Arial-BoldMT" size:13]; 
[mobnoFieldLbl setFont:mobnoFieldLblFont]; 
mobnoFieldLbl.numberOfLines = 0; 
[mobnoFieldLbl setTextColor:[UIColor grayColor]]; 
mobnoFieldLbl.translatesAutoresizingMaskIntoConstraints = NO; 
[contentView addSubview:mobnoFieldLbl]; 


NSArray *mobnoFieldlblHorzConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[mobnoFieldlbl]-|" options:0 metrics:nil views:@{@"mobnoFieldlbl": mobnoFieldLbl}]; 
[contentView addConstraints:mobnoFieldlblHorzConstraint]; 

// Email id field 

self.m_ObjEmailId = [[JVFloatLabeledTextField alloc]init]; 
self.m_ObjEmailId.borderStyle = UITextBorderStyleRoundedRect; 
self.m_ObjEmailId.translatesAutoresizingMaskIntoConstraints = NO; 
self.m_ObjEmailId.placeholder = [NSString stringWithFormat:@"Enter your email id"]; 
[contentView addSubview:self.m_ObjEmailId]; 

    NSArray *emailFieldHorzConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[emailField]-|" options:0 metrics:nil views:@{@"emailField": self.m_ObjEmailId}]; 
[contentView addConstraints:emailFieldHorzConstraint]; 

// Info on the email field 
UILabel* emailFieldLbl = [[UILabel alloc]init]; 
[emailFieldLbl setText:@"To send analytics and reports on happenings in you room(s). Hidden and secure"]; 
emailFieldLbl.numberOfLines = 0; 
UIFont *emailFieldLblFont = [UIFont fontWithName:@"Arial-BoldMT" size:13]; 
dispatch_async(dispatch_get_main_queue(), ^{ 
    emailFieldLbl.preferredMaxLayoutWidth = self.view.bounds.size.width; 
}); 
[emailFieldLbl setFont:emailFieldLblFont]; 
[emailFieldLbl setTextColor:[UIColor grayColor]]; 
emailFieldLbl.translatesAutoresizingMaskIntoConstraints = NO; 
[contentView addSubview:emailFieldLbl]; 

    NSArray *emailFieldlblHorzConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[emailFieldlbl]-|" options:0 metrics:nil views:@{@"emailFieldlbl": emailFieldLbl}]; 
[contentView addConstraints:emailFieldlblHorzConstraint]; 

// Promo code field 
self.m_ObjPromoCode = [[JVFloatLabeledTextField alloc]init]; 
self.m_ObjPromoCode.borderStyle = UITextBorderStyleRoundedRect; 
self.m_ObjPromoCode.translatesAutoresizingMaskIntoConstraints = NO; 
self.m_ObjPromoCode.placeholder = [NSString stringWithFormat:@"Enter promocode (if applicable)"]; 
[contentView addSubview:self.m_ObjPromoCode]; 


NSArray *promocodeFieldHorzConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[promocodeField]-|" options:0 metrics:nil views:@{@"promocodeField": self.m_ObjPromoCode}]; 
[contentView addConstraints:promocodeFieldHorzConstraint]; 

// Submit button 
self.m_ObjSubmitBut = [[UIButton alloc]init]; 

[self.m_ObjSubmitBut setTitle: [NSString stringWithFormat:@"SUBMIT"] forState:UIControlStateNormal]; 
self.m_ObjSubmitBut.backgroundColor = [UIColor redColor]; 
[self.m_ObjSubmitBut setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
self.m_ObjSubmitBut.translatesAutoresizingMaskIntoConstraints = NO; 
self.m_ObjSubmitBut.layer.cornerRadius = 10; 
self.m_ObjSubmitBut.clipsToBounds = YES; 
[parentView addSubview:self.m_ObjSubmitBut]; 


NSDictionary *myTopViews = @{ 
          @"scrollView": self.myScrollView, 
          @"submitButton": self.m_ObjSubmitBut, 
          }; 

NSArray *myTopVConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]-[submitButton(40)]|" options:0 metrics:nil views:myTopViews]; 
NSArray *myTopHConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[submitButton]-|" options:0 metrics:nil views:@{@"submitButton": self.m_ObjSubmitBut}]; 


[parentView addConstraints:myTopVConstraints]; 
[parentView addConstraints:myTopHConstraints]; 



NSDictionary* myViews = @{ 
          @"registView": self.m_ObjTopHeadingLbl, 
          @"nameView": self.m_ObjNameField, 
          @"nameFieldLbl": nameFieldLbl, 
          @"mobnoView":self.m_ObjMobNo, 
          @"mobnoFieldLbl":mobnoFieldLbl, 
          @"emailView":self.m_ObjEmailId, 
          @"emailFieldLbl":emailFieldLbl, 
          @"promocodeView":self.m_ObjPromoCode 
          }; 

NSDictionary* myMetrics = @{ 
          @"sepHeight" : @30.0f, 
          @"sepHeight1" : @5.0f 
          }; 
NSArray *otherConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[registView]-sepHeight-[nameView]-sepHeight1-[nameFieldLbl]-sepHeight-[mobnoView]-sepHeight1-[mobnoFieldLbl]-sepHeight-[emailView]-sepHeight1-[emailFieldLbl]-sepHeight-[promocodeView]" options:0 metrics:myMetrics views:myViews]; 

[contentView addConstraints:otherConstraints]; 
+0

// CGSize scrollableSize = CGSizeMake (100, 200); вы не задали кадр для прокрутки, эта строка прокомментирована – Smile

+0

Нет, это не работает. Infact, я пробовал это на симуляторе iphone4s. – Vidya

+0

привет, у вас есть решение? – Birendra

ответ

0

Вы устанавливаете размер вашего контента для просмотра равным размеру содержащего прокрутки. Логически это означает, что scrollview не имеет области для прокрутки и, следовательно, будет исправлена. Вам нужно увеличить длину содержимого (для вертикальной прокрутки) или более широкий (для горизонтальной прокрутки).

+0

Сделал это, но никакой разницы. NSLayoutConstraint * heightConstraints = [NSLayoutConstraint constraintWithItem: атрибут contentView: NSLayoutAttributeHeight relatedBy: NSLayoutRelationEqual toItem: self.myScrollView: NSLayoutAttributeHeight multiplier: 5.0 constant: 0]; – Vidya

+0

Спасибо за ваш вклад. Infact, ваша причина была основной причиной того, почему прокрутки не было. Мне нужно было просто добавить ограничение высоты в дополнение к другим ограничениям, чтобы включить прокрутку. – Vidya

0

Я думаю, что вам не хватает, чтобы упомянуть scrollEnabled из UIScrollView, попробуйте следующую строку и надеюсь, что он работает для вас.

scrollView.scrollEnabled = YES; 

Также установите contentSize и его размер должен быть больше, чем размер окна, содержащего, чтобы позволить ему быть прокручивать.

[self.scrollforImage setContentSize:CGSizeMake(3000, 3000)];// replace 3000, 3000 according to your need 
+0

Нет, нет. Поведение такое же. Кстати, есть ли какая-то конкретная причина для размещения 200 на 200 для размера контента? – Vidya

+0

Нет, я просто случайно поставил 200 на 200, это зависит от того, что вам нужно делать. – Aamir

+0

Aamir любые другие предложения? – Vidya

0

Ограничений для прокрутки в коде недостаточно. При использовании автоматической компоновки убедитесь, что в вертикальном и горизонтальном направлениях добавлена ​​правильная цепочка ограничений.

Для вида прокрутки для прокрутки, это лишь некоторые общие принципы,

  1. Убедитесь, что все различные секциями пользовательского интерфейса имеет достаточное количество вертикальных и горизонтальных ограничения. Возьмите простую UILabel на экране. Ему нужна позиция x, y - может быть атрибутом ведущий/верхний, центральный, и ему требуется определение размера - фиксированная ширина и высота или ограничение с соседними элементами. Для этого необходимо, чтобы комбинация размеров позиции четко определялась для управления ею с помощью автоматической компоновки.

  2. Если вы установите для translatesAutoresizingMaskIntoConstraints значение NO, вы говорите, что компонент не должен принимать фрейм, размер уже установленный для ограничения требований. Если вы хотите явно указать кадр или размер для некоторых элементов, оставьте это как ДА.

  3. Если контентное изображение закреплено на всех четырех сторонах прокрутки, а scrollview имеет свой размер, положение, определяемое как ограничения или фрейм, этого будет достаточно, чтобы сделать контент прокручиваемым.

  4. Если размер содержимого содержимого просматривается динамически в течение различных событий, вы можете установить scrollview.contentsize в contentview.width и contentview.height явно.

Кроме того, проверьте this, техническую записку от компании Apple на AutoLayout и Scrollviews.

Смежные вопросы