Không thể thay đổi kích thước UIView trong IB


88

Có lẽ là một cái gì đó đơn giản, nhưng tôi không thể tìm ra lý do tại sao tôi không thể thay đổi kích thước UIView trong xib trong Trình tạo giao diện.

Tôi đã tạo chế độ xem mới XIB trong xcode và trong trình kiểm tra kích thước, chiều rộng và chiều cao bị tắt và chuyển sang màu xám 320 x 460. Điều này thật kỳ lạ vì tôi có thể thay đổi kích thước cho hai chế độ xem còn lại (được liên kết với hai thanh tab khác mặt hàng).

Tôi không chắc liệu điều này có liên quan gì không nhưng gần đây tôi đã cập nhật sdk lên 3.

Cảm ơn!

Câu trả lời:


81

Tôi nghĩ rằng bạn không thể chỉnh sửa kích thước trong khi mô phỏng bất kỳ phần tử giao diện người dùng nào chẳng hạn như thanh trạng thái trong Trình tạo giao diện. Bạn có thể thử tắt các phần tử mô phỏng nếu có bất kỳ phần tử nào được bật. Không chắc chắn chính xác tại sao lại như vậy, vì vậy rất mong nhận được phản hồi từ bất kỳ ai biết chính xác lý do tại sao lại như vậy - phải có lý do chính đáng.


1
Cảm ơn, đúng vậy. Sau khi tôi nâng cấp xcode và IB, thanh trạng thái được bật theo mặc định. Những người khác có nó ở tắt.

1
Như ở Xcode 4.2, iOS 5.0.1, điều này đã thay đổi. Câu trả lời của tôi dưới đây giải thích cách có thể đạt được điều này.
lol

1
Rất hữu ích. Chỉ cần tắt thanh trạng thái, điều chỉnh kích thước và sau đó bật lại thanh trạng thái.
Wollan

9
Cài đặt này hoạt động cho ViewController.xib trong Xcode 4.3.3: "Số liệu được mô phỏng - Kích thước: dạng tự do". Sau đó, cài đặt kích thước chế độ xem được bật. Đồng thời loại bỏ tùy chọn thang đo "Chế độ xem" để điền (ngay bên dưới các chỉ số được mô phỏng).
defvol

uuuu dù tôi thực sự không thích IDE này
Saik Caskey

80

Để đạt được điều đó trong XCode 4.6.3 / 5.0.2, bạn cần làm theo ảnh chụp màn hình bên dưới:

  1. Trong 'Trình kiểm tra tệp' -> bỏ chọn Use Auto Layout
  2. Nhấp vào Bộ chọn thuộc tính & Chọn Freeformcho Kích thước

Điều này là cần thiết khi tạo headerView cho tableView

nhập mô tả hình ảnh ở đây


40

Phần bạn đang tìm kiếm nằm trên bảng Thanh tra đầu tiên (Command-1). Ngay trên cùng có một phần được gắn nhãn Phần tử giao diện người dùng được mô phỏng. Theo mặc định, Thanh trạng thái được bật. Bạn cần đảm bảo cả ba đều được đặt thành Không.


2
Cảm ơn, những câu trả lời này đã giúp tôi tiết kiệm rất nhiều thời gian! Có ai biết tại sao IB làm điều này không?
Gregor

Cảm ơn người bạn đời. Tôi đã tìm kiếm cái đó.
natanavra

Lưu ý cho tất cả, đây là: "Không xác định" thay vì không có. (Tôi có phiên bản 3.2.3)
IcyBlueRose

Tôi xác nhận cho iPad là "Không quy định", cảm ơn bạn Thomas Môn, bạn đã lưu tôi một số giờ: D
Qlimax

Tôi chỉ thấy điều này cho Bộ điều khiển chế độ xem, không phải chế độ xem
BigBoy1337

26

Như tại Xcode 4.2, iOS 5.0.1, các chỉ số được mô phỏng mặc định bao gồm việc mô phỏng thuộc tính 'size' của UIViewControllers thành 'Inferred'

Nếu bạn thay đổi thuộc tính này thành 'Freeform' thì bạn có thể thay đổi kích thước UIView có trong UIViewController đồng thời mô phỏng thanh trạng thái (hoặc bất kỳ mô phỏng nào khác cho vấn đề đó)


1
Thuộc tính kích thước hiện được mặc định là "Retina 4 Full screen", nhưng việc thay đổi nó thành "Freeform" vẫn hoạt động.
Pier-Luc Gendreau

4

Chỉ cần đi tới trình kiểm tra, đi tới bảng điều khiển đầu tiên (hoặc nhấn lệnh-1) và sau đó thay đổi các trường được đánh dấu Thanh trạng thái, Thanh trên cùng và Thanh dưới thành Không có trong phần được gọi là "Phần tử giao diện người dùng được mô phỏng". Bạn có thể cần phải nhấp vào hình tam giác nhỏ để hiển thị chúng.


1

Buồn cười là tôi có một vấn đề tương tự. Tôi đã xóa tất cả các chế độ xem khỏi tệp xib và thêm lại một chế độ xem. Đặt thanh trạng thái thành "không xác định" để thanh trạng thái không được cung cấp. Chế độ xem, khi được thêm vào, được tạo với x = 0, y = 0, w = 320 h = 460 thay vì (0,0.320.480) như tôi mong đợi. Sau khi thay đổi chiều cao thành 480 và kết nối nó với chủ sở hữu của tệp và thay đổi màu sắc để làm cho nó trở nên khác biệt so với nền. Tôi cho rằng có một dải màu trắng giữa phần trên của màn hình và khung cảnh. Tôi đã tăng cường mã của mình với:

#define RECTLOG (trực tràng) (NSLog (@ "" #rect @ "x:% fy:% fw:% fh:% f", trực tràng.x, trực tràng.origin.y, trực tràng.size.width, trực tràng . kích thước. chiều cao));

trong viewDidLoad

- (void) viewDidLoad {
    [siêu viewDidLoad];
    RECTLOG (self.view.frame);
}

Hóa ra là chế độ xem như nó được tải từ IB thực sự là (0, 20, 320, 480) Vì một công việc xung quanh tôi đặt lại khung của chế độ xem bằng self.view.frame = CGRectMake (0, 0, 320, 480);

Tôi đang sử dụng IB 3.2.5

Tôi muốn biết một chút sửa chữa cho cái này.


3
FYI, bạn có thể sử dụng NSStringFromCGRect (trực tràng) để lấy một chuỗi có thể in đại diện cho một CGRect.
Berry

Đó là một FYI tuyệt vời, tôi đã kiểm tra nó và bạn thực sự có thể nhận được một giá trị chuỗi từ CGPoint và CGSize! rất nấu ăn, cảm ơn.
FierceMonkey

1

Tôi nhận thấy rằng UIView được tạo tự động khi tạo tệp xib không thể thay đổi kích thước từ bảng định cỡ hoặc các nút điều khiển cạnh.

Tất cả những gì tôi làm là thêm một UIView khác và kéo mọi thứ từ UIView cũ của tôi sang UIView mới sau đó xóa cái cũ.

Nó đã giải quyết được vấn đề cho tôi nhưng có, tôi nghĩ rằng có một vấn đề cơ bản với trình tạo giao diện để Apple giải quyết (ai đó sẽ sửa cho tôi nếu tôi sai).

Tôi đang sử dụng trình tạo giao diện tích hợp XCode 4.


0

Tôi đã sắp xếp nó theo một cách khác ...

mở xib của bạn bằng trình soạn thảo văn bản yêu thích của bạn và chỉnh sửa dòng này

        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="CompassViewController">

CompassViewController là tên lớp mà bạn đang cố gắng liên kết nib / xib với.

Chỉ cần chỉnh sửa tên lớp của bạn với tên lớp chính xác là bạn đã hoàn tất;)


0

nhập mô tả hình ảnh ở đâyTrong bảng phân cảnh, chọn UIVIew và đi đến trình kiểm tra thuộc tính, thay đổi kích thước UIVIew thành "FreeForm" thay vì "Inferred"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.