2014-12-31 14 views
17

Tôi đã googled nhưng không tìm ra câu trả lời. Vì vậy, tôi cần phải hỏi. Tôi có một màn hình chính. Khi người dùng đăng nhập, nó sẽ hiển thị một chế độ xem như dưới đây enter image description here Bây giờ khi người dùng đăng xuất và truy cập trang chủ, bạn sẽ thấy bố cục ở trên nhưng không có bố cục được đóng hộp giữa. Nếu tôi đặt bố cục ẩn, nó hiện đang hiển thị như sau. enter image description hereLàm thế nào để loại bỏ các ràng buộc theo lập trình được thêm vào từ bảng phân cảnh?

tôi muốn chuyển bố trí thứ ba để chút ở trên để loại bỏ khoảng trắng ..

tôi thêm những hạn chế sử dụng kịch bản này. Bây giờ cần phải loại bỏ các ràng buộc khỏi lập trình và thêm một ràng buộc mà sẽ đặt bố trí để bố trí đầu tiên dưới đây ..

+0

Xem blog này: http://stackoverflow.com/questions/17867125/uistoryboard-how-to-replace-constraints-programmatically –

+0

@Mrunal. Có Tôi đang làm việc trên nó thực sự .. Tôi đang nhận được một số cảnh báo về những hạn chế trong đăng nhập .. – Dharmik

Trả lời

9

Lấy IBOutlet của giới hạn chiều cao mà bạn muốn ẩn khi người dùng đăng xuất.

@property(weak, nonatomic) IBOutlet NSLayoutConstraint *viewHeight; 

Có một tài sản liên tục trong NSLayoutConstraint lớp. Bạn cần thiết lập khi người dùng đăng nhập/đăng xuất.

viewHeight.constant = isLoggedIn ? 30.0 : 0.0; 

Hope this helps ..

19

Như @Henit đề cập, bạn có thể thiết lập IBOutlet cho những hạn chế là tốt.

Ví dụ,

@property(weak, nonatomic) IBOutlet NSLayoutConstraint *viewHeight; 

vì vậy bây giờ, bạn có thể loại bỏ hạn chế này như thế này:

[myView removeConstraint: viewHeight]; 

Hoặc khác nếu bạn muốn loại bỏ tất cả/nhiều khó khăn liên quan đến quan điểm của bạn sau đó,

[myView removeConstraints: constraintsArrayHere]; // custom array of constraints references 
[myView removeConstraints: [myView constraints]]; //all constraints 

Sau đó, bạn có thể thêm các ràng buộc mới theo cách tương tự bằng cách sử dụng addConstraint hoặc .

Để biết thêm chi tiết đi qua của Apple Documentation here.

Hope this helps.

1

Bạn cũng có thể thực hiện theo cách khác. Thêm một ràng buộc khoảng cách dọc giữa bố trí thứ ba và bố trí đầu tiên sẽ là 30. Sau đó thêm một tham chiếu đến ràng buộc trong bộ điều khiển.

self.verticalSpacingFromThirdToFirstConstraint.constant = isLoggedIn ? 30.0 : 0.0 

PS: Bạn không nên thêm giới hạn độ cao cho chế độ xem ở giữa trong trường hợp này. Chỉ cần thêm bốn dấu, hàng đầu, đầu (đến bố cục đầu tiên) và dưới cùng (để bố trí thứ ba).

10

removeConstraints sẽ không được dùng nữa trong tương lai.

Bạn có thể sử dụng sau khi thay thế

viewHeight.active = NO; 
0

Bạn có thể thêm một hạn chế chiều cao cho quan điểm mà bạn muốn ẩn. Và thêm một lối thoát NSlayoutHeightcontraint cho giới hạn chiều cao đó trong tệp viewcontroller.h của bạn. Sau đó, bạn có thể gọi đó là heightConstrain trong tệp viewcontroller.m của bạn ở bất cứ đâu bạn cần. Thêm mã này vào nơi bạn muốn ẩn số này UIview:

_heightconstrainOutlet.constant=0; 

Nó sẽ làm cho chiều cao đó trở thành 0. Vì vậy, chế độ xem dưới cùng của bạn cũng sẽ bao gồm khu vực đó. Nếu chế độ xem dưới cùng của bạn có giới hạn chiều cao và không gian dưới đáy để hạn chế vùng chứa không? Chỉ cần xóa bất kỳ một trong số họ theo yêu cầu của bạn. Cảm ơn bạn

8

Để mở rộng câu trả lời của @ Megamind: bạn có thể sử dụng thuộc tính active của NSLayoutConstraint. Chỉ cần thiết lập hai ràng buộc khác nhau cho hai trường hợp và kích hoạt chỉ một trong số chúng tùy thuộc vào trạng thái đăng nhập. Trong InterfaceBuilder tài sản active là kỳ quặc gọi Installed:

Login constraintRegister constraint

Sau đó, trong chuyển đổi mã của bạn giữa hai:

- (void)setupRegistrationView 
{   
    _loadingIndicatorTopConstraintLogin.active = NO; 
    _loadingIndicatorTopConstraintRegister.active = YES; 
} 

- (void)setupLoginView 
{   
    _loadingIndicatorTopConstraintLogin.active = YES; 
    _loadingIndicatorTopConstraintRegister.active = NO; 
} 

BTW, sử dụng UIStackView mới có thể cung cấp một giải pháp thanh lịch hơn cho trường hợp của bạn nhưng đó là một chủ đề khác.

+0

người đàn ông tiết kiệm cuộc sống! –

1

Nó khá đơn giản từ iOS 10+ bạn chỉ có thể lặp qua tất cả các ràng buộc của một dạng xem và tắt nó. Nếu bạn, ví dụ: muốn tìm và loại bỏ các hạn chế chiều cao của một cái nhìn, bạn có thể làm như sau:

for constraint in constraints { 
    guard constraint.firstAnchor == heightAnchor else { continue } 
    constraint.isActive = false 
    break 
} 

THAY THẾ
Nó thậm chí còn một lớp lót. Nếu bạn đang ở trong tầm nhìn của bạn, bạn chỉ có thể viết:

constraints.first { $0.firstAnchor == heightAnchor }?.isActive = false 
+1

điều này sẽ được chấp nhận – JohannaNoobie

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