2012-10-09 38 views
16

Tôi đã tạo ra một UIView sử dụng đoạn mã sau trong viewDidLoad (nơi 'secondview' rõ ràng là tên của UIView):Làm cách nào để thêm các ràng buộc lập trình vào UIView được lập trình?

secondview = [[UIView alloc] initWithFrame:self.view.frame]; 
    [secondview setBackgroundColor: [UIColor yellowColor]]; 
    secondview.translatesAutoresizingMaskIntoConstraints = NO; 
    [self.view addSubview:secondview]; 

Sau đó, trong vòng viewDidAppear tôi thêm trở ngại đối với quan điểm này:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:secondview attribute:NSLayoutAttributeRight 
    relatedBy:NSLayoutRelationEqual 
    toItem:self.view 
    attribute:NSLayoutAttributeRight 
    multiplier:1.0f constant:-20.0f]; 
[self.view addConstraint:constraint]; 

Tuy nhiên, các ràng buộc không được áp dụng cho khung nhìn (ít nhất không phải là tôi có thể thấy). Thay vào đó, chế độ xem đơn giản dường như biến mất khỏi màn hình. Tuy nhiên, nếu mã ràng buộc được nhận xét, khung nhìn một lần nữa tải với khung thích hợp (rõ ràng là không có các ràng buộc được áp dụng). Khi áp dụng các ràng buộc giống nhau cho một Button hoặc ImageView, các ràng buộc được áp dụng một cách hoàn hảo. Điều này đã khiến tôi nghĩ rằng vấn đề là do 'initWithFrame' khi tạo Chế độ xem, vì cả nút và ImageView đều không yêu cầu kích thước của nó được chỉ định.

Suy nghĩ của bạn là gì? Tôi nên làm gì khác?

Trả lời

12

Đối với bất kỳ ai gặp phải điều này ... Tôi cần thêm nhiều hơn một ràng buộc. Điều đó đã làm các trick.

+1

Vâng, điều này cũng giúp tôi. Rõ ràng bạn cần ít nhất hai ràng buộc hoặc khung nhìn sẽ không hiển thị. – JasonD

+1

Bạn cần càng nhiều càng tốt để loại bỏ sự mơ hồ. Điều này có thể là ít nhất là hai, nhưng đôi khi nhiều hơn. (Nhãn, ví dụ yêu cầu tối thiểu là hai, nó có thể suy ra kích thước từ văn bản, nhưng bạn cần phải cung cấp cho nó một X và Y) – LightningStryk

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