[iphone] Android View.GONE 가시성 모드에 해당하는 iOS

iOS 용 앱을 개발 중이며 AutoLayout이 켜진 상태에서 Storyboard를 사용하고 있습니다. 내 뷰 컨트롤러 중 하나에는 4 개의 버튼 세트가 있으며 특정 상황에서는 첫 번째 버튼을 사라지게 만들고 싶습니다.

setHidden:TRUE메서드를 사용하면 UIButton이 보이지 않지만 여전히 뷰에서 공간을 차지하고 그 결과 나머지 UIButton이 메인 뷰의 상단을 향해 떠 있도록 채울 수없는 “구멍”이됩니다.

Android에서는 View.GONE대신 단순히을 사용 View.INVISIBLE했지만 iOS에서는이 동작에 갇혀 있고 유일한 해결책은 나머지 요소를 수동으로 (예, 프로그래밍 방식으로) 이동하는 것이라고 믿고 싶지 않습니다.

나는 안드로이드 에서처럼 모든 것을 자동으로 만들기 위해 일종의 Constraint를 설정할 수 있었을 것이라고 생각했지만 운이 없었습니다.

Autolayout을 끄기 전에 누군가 올바른 방향으로 나를 가리킬 수 있습니까?

IB를 사용하고 있지만 프로그래밍 방식에도 익숙합니다.

최신 정보:

구성 요소 높이를 0으로 설정하는 것도 도움이되지 않습니다.

나는 다음과 같이 시도했다.

UIButton *b;
CGRect frameRect = b.frame;
frameRect.size.height = 0;
b.frame = frameRect;



답변

뷰의 높이를 0으로 설정하는 제약 조건 (NSLayoutAttributeHeight)을 추가하면 저에게 효과적이었습니다.

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.captchaView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:0]];


답변

이 질문에 대한 모든 답변은 비효율적입니다. iOS에서 Android setVisibility : Gone 메서드를 equvailent하는 가장 좋은 방법은 StackView먼저 구성 요소를 선택한 다음 편집기에서 삽입, 스택보기,

새 스택보기를 IBOutlet과 연결 한 다음 :

숨겨진:

UIView * firstView = self.svViewFontConfigure.arrangedSubviews[0];
        firstView.hidden = YES;

시계:

UIView * firstView = self.svViewFontConfigure.arrangedSubviews[0];
        firstView.hidden = NO;

스택 뷰를 사용하면 모든 제약 조건이 유지됩니다!

문서


답변

다음과 같이 뷰에 높이 제한을 추가합니다.여기에 이미지 설명 입력

그런 다음 viewController 파일에서 다음과 같이 높이 제약에 대한 콘센트를 만듭니다.여기에 이미지 설명 입력

& 그런 다음 viewDidLoad 메서드에서 제약 조건 높이를 다음과 같이 0으로 변경합니다.

override func viewDidLoad() {
    super.viewDidLoad()
nsLcButtonHeight.constant = 0
}


답변

iOS에서 Androids.GONE 기능을 달성하려면 UIStackView를 사용합니다. 그 후 위치별로 아이를 숨 깁니다. ( 사과 문서 )

SWIFT 4 :

let firstView = cell.rootStackView.arrangedSubviews[0]
    firstView.isHidden = true // first view gone

그것은 테이블 셀 예제입니다. 두 가지 모두 안에 넣고 아이를 Stack view위한 아이템을 얻으십시오 GONE.

여기에 이미지 설명 입력


답변

할 수있는 일은 스택보기 아래에보기를 그룹화하는 것입니다. 그런 다음 특정보기를 숨기면 나머지보기가 공간을 채우기 위해 자동으로 이동합니다.

스택 뷰에 대한 Apple 문서를 확인할 수 있습니다 :
https://developer.apple.com/reference/uikit/uistackview

또는 다음과 같은 온라인 자습서 : https://www.appcoda.com/stack-views-intro/


답변

1) 버튼이 수직으로 배치 height된 경우를 0으로 설정하고 수평으로 배치 된 버튼의 경우 width0으로 설정 하거나 둘 다 0으로 설정할 수 있습니다.

또는

2) 당신은 설정이 방법을 시도 할 수 button2의 상단에를 button1:

- (void)viewDidLoad
{
[super viewDidLoad];

UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button1 setTitle:@"hello" forState:UIControlStateNormal];

UIButton *button2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button2 setTitle:@"world" forState:UIControlStateNormal];

[button1 sizeToFit]; [button2 sizeToFit];
[button2 setFrame:CGRectMake(button1.frame.origin.x, button1.frame.origin.y, button2.frame.size.width, button2.frame.size.height)];

[self.view addSubview:button1];
[self.view addSubview:button2];

}


답변

https://github.com/tazihosniomar/LayoutManager

나는 그것이 당신을 도울 것이기를 바랍니다.