2017-02-14 5 views
0

Я новичок в ios. Недавно я попробовал scrollview. Но все подзоны прокрутки отображаются за навигационной панелью. Я осмотрел в 3D-представлении, но поставил точку останова. Я вызываю этот метод из viewDidLoad. ПомощьВсе виды отображаются в верхней части self.view за навигационной панелью при добавлении прокрутки.

#import "AddContactViewController.h" 
#import "NSStringCategory.h" 
#import "ContactList.h" 
#import "AddContactDelegate.h" 
#import "ContactsListViewController.h" 
#import "ContactDisplayingViewController.h" 
#import "Contact.h" 
@interface AddContactViewController() 
@property NSMutableArray * textFields; 
@property UIDatePicker *inputViewDatePicker; 
@property UIDatePicker *inputViewDatePicker1; 
@property UIScrollView * scrollView; 
@end 

@implementation AddContactViewController 
#pragma mark - Setting up the view 
-(void)createView{ 
    /*CGFloat x = 0; 
    CGFloat y = self.navigationController.navigationBar.frame.size.height; 
    CGFloat widthCG = self.view.frame.size.width; 
    CGFloat heightCG = self.view.frame.size.height;*/ 
    NSLayoutConstraint * myConstraint; 
    //Date pickers 
    self.inputViewDatePicker = [[UIDatePicker alloc]init]; 
    self.inputViewDatePicker.datePickerMode = UIDatePickerModeDate; 
    self.inputViewDatePicker1 = [[UIDatePicker alloc]init]; 
    self.inputViewDatePicker1.datePickerMode = UIDatePickerModeDate; 
    [self.inputViewDatePicker addTarget:self action:@selector(datePickerChanged:) forControlEvents:UIControlEventValueChanged]; 
    [self.inputViewDatePicker1 addTarget:self action:@selector(expiryDatePickerChanged:) forControlEvents:UIControlEventValueChanged]; 
    self.scrollView = [[UIScrollView alloc]init]; 
    //self.scrollView.frame = self.view.frame; 
// self.scrollView.frame = CGRectMake(0, 0, 500, 500); 
    NSLog(@"The frame of the view is %@",self.view.frame); 
// self.scrollView.contentSize = CGSizeMake(414,736); 
    [self.view addSubview:self.scrollView]; 
    self.scrollView.translatesAutoresizingMaskIntoConstraints = NO; 

    myConstraint = [NSLayoutConstraint constraintWithItem:self.scrollView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1 constant:0]; 
    [self.view addConstraint:myConstraint]; 

    myConstraint = [NSLayoutConstraint constraintWithItem:self.scrollView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1 constant:0]; 
    [self.view addConstraint:myConstraint]; 

    myConstraint = [NSLayoutConstraint constraintWithItem:self.scrollView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:0]; 
    [self.view addConstraint:myConstraint]; 

    myConstraint = [NSLayoutConstraint constraintWithItem:self.scrollView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; 
    [self.view addConstraint:myConstraint]; 
    UILabel *name = [[UILabel alloc]init]; 
    [name setText:@"Name"]; 
    name.translatesAutoresizingMaskIntoConstraints = NO; 

    [self.scrollView addSubview:name]; 
    self.nameTextField = [[UITextField alloc]init]; 
    self.nameTextField.placeholder = @"Name"; 
    myConstraint =[NSLayoutConstraint constraintWithItem:name 
               attribute:NSLayoutAttributeBottom 
               relatedBy:NSLayoutRelationEqual 
                toItem:self.scrollView 
               attribute:NSLayoutAttributeBaseline 
               multiplier:((float)2/10) 
               constant:0]; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:name attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeLeft multiplier:1 constant:10]; 
    [self.scrollView addConstraint:myConstraint]; 

    self.nameTextField.translatesAutoresizingMaskIntoConstraints = NO; 
    self.nameTextField.borderStyle = UITextBorderStyleLine; 
    NSLog(@"%@",[self.nameTextField class]); 
    [self.scrollView addSubview:self.nameTextField]; 
    myConstraint =[NSLayoutConstraint constraintWithItem:self.nameTextField 
               attribute:NSLayoutAttributeBottom 
               relatedBy:NSLayoutRelationEqual 
                toItem:self.scrollView 
               attribute:NSLayoutAttributeBaseline 
               multiplier:((float)2/10) 
               constant:0]; 
    [self.scrollView addConstraint:myConstraint]; 

    myConstraint = [NSLayoutConstraint constraintWithItem:self.nameTextField 
               attribute:NSLayoutAttributeRight 
               relatedBy:NSLayoutRelationEqual 
                toItem:self.scrollView 
               attribute:NSLayoutAttributeRight 
               multiplier:1 
               constant:-10]; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:self.nameTextField 
               attribute:NSLayoutAttributeWidth 
               relatedBy:NSLayoutRelationEqual 
                toItem:self.scrollView 
               attribute:NSLayoutAttributeWidth 
               multiplier:((float)0.65) 
               constant:0]; 
    [self.scrollView addConstraint:myConstraint]; 


    //Second Name 
    UILabel *secondName = [[UILabel alloc]init]; 
    [secondName setText:@"Second Name"]; 
    [secondName sizeToFit]; 
    [self.scrollView addSubview:secondName]; 
    self.secondNameTextField = [[UITextField alloc]init]; 
    self.secondNameTextField.placeholder = @"Second Name"; 
    myConstraint =[NSLayoutConstraint constraintWithItem:secondName 
               attribute:NSLayoutAttributeBottom 
               relatedBy:NSLayoutRelationEqual 
                toItem:self.scrollView 
               attribute:NSLayoutAttributeBaseline 
               multiplier:((float)3.5/10) 
               constant:0]; 
    secondName.translatesAutoresizingMaskIntoConstraints = NO; 
    [self.scrollView addConstraint:myConstraint]; 

    myConstraint = [NSLayoutConstraint constraintWithItem:secondName attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeLeft multiplier:1 constant:10]; 
    myConstraint =[NSLayoutConstraint constraintWithItem:self.secondNameTextField 
               attribute:NSLayoutAttributeBottom 
               relatedBy:NSLayoutRelationEqual 
                toItem:self.scrollView 
               attribute:NSLayoutAttributeBaseline 
               multiplier:((float)3.5/10) 
               constant:0]; 
    [self.scrollView addSubview:self.secondNameTextField]; 
    [self.scrollView addConstraint:myConstraint]; 
    self.secondNameTextField.translatesAutoresizingMaskIntoConstraints = NO; 
    self.secondNameTextField.borderStyle = UITextBorderStyleLine; 
    myConstraint = [NSLayoutConstraint constraintWithItem:self.secondNameTextField 
               attribute:NSLayoutAttributeRight 
               relatedBy:NSLayoutRelationEqual 
                toItem:self.scrollView 
               attribute:NSLayoutAttributeRight 
               multiplier:1 
               constant:-10]; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:self.secondNameTextField 
               attribute:NSLayoutAttributeWidth 
               relatedBy:NSLayoutRelationEqual 
                toItem:self.scrollView 
               attribute:NSLayoutAttributeWidth 
               multiplier:((float)0.65) 
               constant:0]; 
    [self.scrollView addConstraint:myConstraint]; 


    //Email 
    self.emailTextField = [[UITextField alloc]init]; 
    UILabel *email = [[UILabel alloc]init]; 
    [email setText:@"Email"]; 
    [self.scrollView addSubview:email]; 
    myConstraint =[NSLayoutConstraint constraintWithItem:email 
               attribute:NSLayoutAttributeBottom 
               relatedBy:NSLayoutRelationEqual 
                toItem:[email superview] 
               attribute:NSLayoutAttributeBaseline 
               multiplier:((float)5/10) 
               constant:0]; 
    email.translatesAutoresizingMaskIntoConstraints = NO; 
    self.emailTextField.translatesAutoresizingMaskIntoConstraints = NO; 
    self.emailTextField.borderStyle = UITextBorderStyleLine; 
    self.emailTextField.placeholder = @"Email"; 

    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:email attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeLeft multiplier:1 constant:10]; 
    [self.scrollView addConstraint:myConstraint]; 
    [self.scrollView addSubview:self.emailTextField]; 

    myConstraint =[NSLayoutConstraint constraintWithItem:self.emailTextField 
               attribute:NSLayoutAttributeBottom 
               relatedBy:NSLayoutRelationEqual 
                toItem:self.scrollView 
               attribute:NSLayoutAttributeBaseline 
               multiplier:((float)5/10) 
               constant:0]; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:self.emailTextField attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeRight multiplier:1 constant:-10]; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:self.emailTextField attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeWidth multiplier:((float)0.65) constant:0]; 
    [self.scrollView addConstraint:myConstraint]; 


    //Number 
    UILabel * number = [[UILabel alloc]init]; 
    number.translatesAutoresizingMaskIntoConstraints = NO; 
    [number setText:@"Number"]; 
    [self.scrollView addSubview:number]; 
    myConstraint =[NSLayoutConstraint constraintWithItem:number 
               attribute:NSLayoutAttributeBottom 
               relatedBy:NSLayoutRelationEqual 
                toItem:[number superview] 
               attribute:NSLayoutAttributeBaseline 
               multiplier:((float)6.5/10) 
               constant:0]; 
    self.numberTextField.translatesAutoresizingMaskIntoConstraints = NO; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:number attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeLeft multiplier:1 constant:10]; 
    [self.scrollView addConstraint:myConstraint]; 
    self.numberTextField = [[UITextField alloc]init]; 
    self.numberTextField.placeholder = @"Number"; 
    self.numberTextField.translatesAutoresizingMaskIntoConstraints = NO; 
    self.numberTextField.borderStyle = UITextBorderStyleLine; 
    myConstraint =[NSLayoutConstraint constraintWithItem:self.numberTextField 
               attribute:NSLayoutAttributeBottom 
               relatedBy:NSLayoutRelationEqual 
                toItem:self.scrollView 
               attribute:NSLayoutAttributeBaseline 
               multiplier:((float)6.5/10) 
               constant:0]; 
    [self.scrollView addSubview:self.numberTextField]; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:self.numberTextField attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeRight multiplier:1 constant:-10]; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:self.numberTextField attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeWidth multiplier:((float)0.65) constant:0]; 
    [self.scrollView addConstraint:myConstraint]; 


    //Date of Birth 
    NSDate *now = [[NSDate alloc]init]; 
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"YYYY:MM:dd"]; 
    self.theDob = [[UITextField alloc]init]; 
    self.theDob.translatesAutoresizingMaskIntoConstraints = NO; 
    self.theDob.borderStyle = UITextBorderStyleLine; 
    //[self.theDob addTarget:self action:@selector(DobTapped:) forControlEvents:UIControlEventAllTouchEvents]; 
    self.theDob.userInteractionEnabled = true; 
    self.theDob.enabled = true; 
    self.theDob.inputView = self.inputViewDatePicker; 
    self.theDob.text = [dateFormatter stringFromDate:now]; 
    NSLog(@"The date is %@",[dateFormatter stringFromDate:now]); 
    [self.scrollView addSubview: self.theDob]; 
    myConstraint =[NSLayoutConstraint constraintWithItem:self.theDob 
               attribute:NSLayoutAttributeBottom 
               relatedBy:NSLayoutRelationEqual 
                toItem:self.scrollView 
               attribute:NSLayoutAttributeBaseline 
               multiplier:((float)8/10) 
               constant:0]; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:self.theDob attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeRight multiplier:1 constant:-10]; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:self.theDob attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeWidth multiplier:((float)0.65) constant:0]; 
    [self.scrollView addConstraint:myConstraint]; 
    UILabel *dob = [[UILabel alloc]init]; 
    [dob setText:@"DOB"]; 
    [self.scrollView addSubview:dob]; 
    myConstraint =[NSLayoutConstraint constraintWithItem:dob 
               attribute:NSLayoutAttributeBottom 
               relatedBy:NSLayoutRelationEqual 
                toItem:[dob superview] 
               attribute:NSLayoutAttributeBaseline 
               multiplier:((float)8/10) 
               constant:0]; 
    dob.translatesAutoresizingMaskIntoConstraints = NO; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:dob attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeLeft multiplier:1 constant:10]; 
    [self.scrollView addConstraint:myConstraint]; 


    //Expiry Date 
    self.expirydate = [[UITextField alloc]init]; 
    self.expirydate.translatesAutoresizingMaskIntoConstraints = NO; 
    [self.scrollView addSubview: self.expirydate]; 
    myConstraint =[NSLayoutConstraint constraintWithItem:self.expirydate 
               attribute:NSLayoutAttributeBottom 
               relatedBy:NSLayoutRelationEqual 
                toItem:self.scrollView 
               attribute:NSLayoutAttributeBaseline 
               multiplier:((float)9.5/10) 
               constant:0]; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:self.expirydate attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeRight multiplier:1 constant:-10]; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:self.expirydate attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeWidth multiplier:((float)0.65) constant:0]; 
    self.expirydate.text = [dateFormatter stringFromDate:now]; 
    self.expirydate.userInteractionEnabled = true; 
    self.expirydate.enabled = true; 
    self.expirydate.borderStyle = UITextBorderStyleLine; 
    self.expirydate.text = [dateFormatter stringFromDate:[[NSDate alloc]init] ]; 
    self.expirydate.inputView = self.inputViewDatePicker1; 
    [self.scrollView addConstraint:myConstraint]; 
    UILabel *expiryDate = [[UILabel alloc]init]; 
    [expiryDate setText:@"Expiry Date"]; 
    [expiryDate sizeToFit]; 
    [self.scrollView addSubview:expiryDate]; 
    NSLog(@"%@",NSStringFromCGRect(self.scrollView.frame)); 
    NSLog(@"%@",NSStringFromCGRect(self.nameTextField.frame)); 
    NSLog(@"%@ super class",[self.scrollView superview]); 
    NSLog(@"the scroll super class %@",[self.nameTextField superview]); 
    myConstraint =[NSLayoutConstraint constraintWithItem:expiryDate 
               attribute:NSLayoutAttributeBottom 
               relatedBy:NSLayoutRelationEqual 
                toItem:self.scrollView 
               attribute:NSLayoutAttributeBaseline 
               multiplier:((float)9.5/10) 
               constant:0]; 
    expiryDate.translatesAutoresizingMaskIntoConstraints = NO; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:expiryDate attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeLeft multiplier:1 constant:10]; 
    [self.scrollView addConstraint:myConstraint]; 
    //[self.scrollView addSubview:self.scrollView]; 

    //Navigation Buttons 
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Save" style:UIBarButtonItemStylePlain target:self action:@selector(saveContact:)]; 

    myConstraint = [NSLayoutConstraint constraintWithItem:self.nameTextField attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:name attribute:NSLayoutAttributeRight multiplier:1 constant:20]; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:self.emailTextField attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:email attribute:NSLayoutAttributeRight multiplier:1 constant:20]; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:self.secondNameTextField attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:secondName attribute:NSLayoutAttributeRight multiplier:1 constant:20]; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:self.numberTextField attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:number attribute:NSLayoutAttributeRight multiplier:1 constant:20]; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:self.theDob attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:dob attribute:NSLayoutAttributeRight multiplier:1 constant:20]; 
    [self.scrollView addConstraint:myConstraint]; 
    myConstraint = [NSLayoutConstraint constraintWithItem:self.expirydate attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:expiryDate attribute:NSLayoutAttributeRight multiplier:1 constant:20]; 
    [self.scrollView addConstraint:myConstraint]; 
} 
+0

Нет. Это не помогает. Моя проблема в том, что высота прокрутки не указана. Все взгляды появляются на 0-й позиции. –

ответ

0

Часть вашей проблемы - вы устанавливаете ограничения на объекты относительно NSLayoutAttributeBaseline в Scroll View ... который, я считаю, всегда 0.

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

Попробуйте для первого ограничения:

myConstraint =[NSLayoutConstraint constraintWithItem:name 
              attribute:NSLayoutAttributeBaseline 
              relatedBy:NSLayoutRelationEqual 
               toItem:self.scrollView 
              attribute:NSLayoutAttributeTop 
              multiplier:1 
              constant:20]; 

Это следует поставить базовую линию наклейке «Name» на 20 очков от верхней части Scroll View.

+0

Большое спасибо. Это сработало –

0

Вы можете попробовать следующее

[self.navigationController.navigationBar setTranslucent:NO]; 

Таким образом, ни один из подвидов вашего self.view будет за UINavigationBar.

Пожалуйста, дайте мне знать, если это не поможет, или вы ищете что-то еще.

+0

Нет. На самом деле я хочу, чтобы представления заполняли вид прокрутки. Прямо сейчас они появляются только сверху. На 0-й позиции –

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