2012-10-07 31 views
9

Tôi đang triển khai biểu mẫu bên trong một UIScrollView. Tôi đang cố gắng thêm một số không gian ở cuối nội dung của chế độ xem cuộn khi bàn phím được mở để người dùng có thể xem tất cả các trường. Tôi đặt quan điểm hình thức bên trong UISCrollView thêm tất cả những hạn chế cần thiết với đoạn mã sau:iOS: Thay đổi nội dung của UIScrollview bằng bố cục tự động

[_infoView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_infoView(1730)]" options:0 metrics:nil views:views]]; 

[_scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_infoView]|" options:0 metrics:nil views:views]]; 

[_scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_infoView]|" options:0 metrics:nil views:views]]; 

[_scrollView addConstraint:[NSLayoutConstraint constraintWithItem:_infoView 
                 attribute:NSLayoutAttributeCenterX 
                 relatedBy:NSLayoutRelationEqual 
                  toItem:_scrollView 
                 attribute:NSLayoutAttributeCenterX 
                 multiplier:1 
                 constant:0]]; 

Như bạn thấy, tôi chỉ định trong dòng đầu tiên chiều cao của hình thức và scrollview điều chỉnh kích thước nội dung một cách tự động. Bây giờ tôi muốn tăng chiều cao của biểu mẫu, vì vậy tôi đã cố gắng đặt lại ràng buộc cho chiều cao bằng một chiều cao hơn nhưng nó sẽ không hoạt động. Sau đó, tôi đã cố gắng sử dụng phương pháp [_scrollView setContentSize:] nhưng điều này cũng sẽ không hoạt động. Có ai có thể giúp tôi không?

+0

Bạn đã bao giờ tìm ra điều này chưa? Tôi đang có một thời gian khủng khiếp để tìm ra điều này. – mkral

Trả lời

-2

Tôi không chắc chắn nơi bạn thêm đoạn mã trên, nhưng dưới đây sẽ giải quyết vấn đề của bạn

Trong hàm init của bạn, thêm dưới đây:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; 
     [center addObserver:self selector:@selector(noticeShowKeyboard:) name:UIKeyboardDidShowNotification object:nil]; 
     [center addObserver:self selector:@selector(noticeHideKeyboard:) name:UIKeyboardWillHideNotification object:nil]; 

Thêm bên dưới để .h bạn

CGSize keyboardSize; 
int keyboardHidden;  // 0 @ initialization, 1 if shown, 2 if hidden 

Thêm bên dưới để .m bạn

-(void) noticeShowKeyboard:(NSNotification *)inNotification { 
    keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 
    keyboardHidden = 1; 
    [self layoutSubviews];  // Not sure if it is called automatically, so I called it 


} 
-(void) noticeHideKeyboard:(NSNotification *)inNotification { 
    keyboardHidden = 2; 
    [self layoutSubviews];  // Not sure if it is called automatically, so I called it 

} 

- (void) layoutSubviews 
{ 
    [super layoutSubviews]; 

    if(keyboardHidden == 1) { 
     scrollview.frame = CGRectMake(scrollview.frame.origin.x, scrollview.frame.origin.y, scrollview.frame.size.width, scrollview.frame.size.height + keyboardSize.height); 
    } 
    else if(keyboardHidden == 2) { 
     scrollview.frame = CGRectMake(scrollview.frame.origin.x, scrollview.frame.origin.y, scrollview.frame.size.width, scrollview.frame.size.height - keyboardSize.height); 
    } 
} 

Tôi đã ghi đè layoutsubviews, giờ tôi nghĩ nó sẽ hoạt động.

+0

Vấn đề là nếu nib của bạn đang sử dụng tự động bố trí kích thước rect được quản lý bởi các ràng buộc và thiết lập chúng diretcly wont làm việc – mastergap

+1

Kiểm tra câu trả lời đã chỉnh sửa, ghi đè 'layoutoutsubviews' sẽ giải quyết vấn đề của bạn ... – MuhammadBassio

4

Nếu tôi hiểu sự cố, tôi khuyên bạn nên điều chỉnh thuộc tính contentInset trên số UIScrollView thay vì gọi layoutSubviews. Lưu ý rằng các tài liệu nói:

Sử dụng thuộc tính này để thêm vào vùng cuộn xung quanh nội dung của bạn. Đơn vị kích thước là điểm. Giá trị mặc định là UIEdgeInsetsZero.

Bạn vẫn phải lắng nghe các thông báo bàn phím ẩn/hiển thị để biết khi nào cần điều chỉnh chiều cao của scrollview của bạn:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; 

Sau đó, trong keyboardWillShow bạn có thể làm điều này:

UIEdgeInsets insets = UIEdgeInsetsMake(0, 0, 100, 0); 
scrollView.contentInset = insets; 

100 là chiều cao mà bạn muốn điều chỉnh scrollView của mình. Tôi làm điều này với một UITableView, trong đó tôi có các thành phần dạng như UITableViewCell s và nó hoạt động tốt.

Các vấn đề liên quan