2012-07-13 32 views
6

Tôi đã tạo chế độ xem bàn phím tùy chỉnh và liên kết chế độ xem đó với thuộc tính inputView của UITextField. Có cách nào thay đổi chiều cao của một inputView tùy chỉnh khi định hướng thay đổi và khung hình thay đổi hoạt hình trơn tru giống như bàn phím hệ thống không? Kích thước bàn phím của tôi là 768x272 và khi thiết bị chuyển động, kích thước trở thành 1024x272, nhưng tôi muốn làm cho nó lớn hơn 1024x372. Nếu tôi thay đổi khung bằng mã bên dưới khi tôi nhận được UIDeviceOrientationDidChangeNotification, hoạt ảnh thay đổi không mượt mà.Thay đổi chiều cao của chế độ xem đầu vào tùy chỉnh khi thiết bị xoay

textField.inputView.frame = CGRectMake(0,0,1024,372); 
+0

bạn đã thử đặt nó dưới khối hoạt ảnh ?? – Zaraki

+0

Tôi đã cố gắng đặt nó như là một khối hoạt hình trong willRotateToInterfaceOrientation: (UIInterfaceOrientation) toInterfaceGiới hạn thời gian: (NSTimeInterval) duration Nhưng kết quả là như nhau, chiều cao thay đổi ngay lập tức từ nhỏ đến cao, sau đó hoạt ảnh bắt đầu để làm cho nó ngắn để rộng. – user1477781

Trả lời

2

Sau nhiều thử nghiệm, tôi đã tìm thấy câu trả lời hay nhất cho câu hỏi của riêng mình. Câu trả lời ngắn gọn là thay đổi khung khi bạn nhận được UIKeyboardDidHideNotification.

Chế độ xem đầu vào tùy chỉnh được nhúng trong chế độ xem khác được kiểm soát bởi hệ thống được gọi là UIPeripheralHostView. Vì vậy, việc thay đổi inputView tùy chỉnh tại thời điểm sai sẽ không được phản ánh ngay lập tức hoặc hiển thị bố cục xấu nhất ở mức tốt nhất.

Khi thiết bị quay, hệ thống sẽ ẩn nhanh bàn phím, sau đó thực hiện hoạt ảnh xoay của bàn phím từ hướng cũ sang hướng mới. Tôi nghĩ rằng khối hoạt ảnh được chèn vào đâu đó giữa hai thông báo UIKeyboardDidHideNotificationUIKeyboardWillShowNotification. Các thông báo này được kết hợp với UIKeyboardWillChangeFrameNotification. "Khung" trong thông báo này thực sự có nghĩa là khung của UIPeripheralHostView.

Vì vậy, thay đổi khung của chế độ xem đầu vào khi tôi nhận được UIKeyboardDidHideNotification cho phép hệ thống điều chỉnh khung UIPeripheralHostView trước khi hoạt ảnh bắt đầu, dẫn đến chuyển đổi suôn sẻ từ bàn phím ngắn sang bàn phím cao.

Tính năng này hoạt động trong iOS 5. Nhưng Apple có thể thay đổi thực tiễn trong tương lai.

+0

Trong iOS 6, bạn sẽ không nhận được thông báo UIKeyboardWillShowNotification etc khi bạn có một inputView tùy chỉnh – theraven

6

mỗi Apple documentation cho UIResponder.inputXem: "Nếu UIKit gặp chế độ xem đầu vào với giá trị UIViewAutoresizingFlexibleHeight trong mặt nạ tự động hóa, nó thay đổi chiều cao để khớp với bàn phím."

Vì vậy, nếu bạn muốn chiều cao tùy chỉnh, bạn không nên chỉ định mặt nạ UIVieAutoresizingFlexibleHeight.