Android View에 해당하는 iOS.GONE 가시성 모드
저는 iOS용 앱을 개발하고 있으며 스토리보드를 자동 레이아웃 ON으로 사용하고 있습니다.제 뷰 컨트롤러 중 하나에는 4개의 버튼이 있으며, 특정 상황에서는 첫 번째 버튼을 사라지게 하고 싶습니다.
를 하면,setHidden:TRUE
방법은 UIButton이 보이지 않게 되지만 여전히 뷰에서 공간을 차지하는 것이 분명하며, 그 결과 남은 UIButton이 메인 뷰의 상단을 향해 뜨게 하는 "구멍"을 채우지 못했습니다.
Android에서 나는 단순히 사용했을 것입니다.View.GONE
에 View.INVISIBLE
하지만 iOS에서는 이러한 동작에 얽매여 있으며 유일한 해결책이 수동으로(예, 프로그래밍 방식으로) 나머지 요소를 맨 위로 이동하는 것이라고 믿고 싶지 않습니다.
안드로이드에서처럼 모든 것을 자동으로 만들기 위해 일종의 제약 조건을 설정하여 할 수 있을 것이라고 생각했지만 운이 없었습니다.
자동 레이아웃을 끄기 전에 누가 올바른 방향을 알려줄 수 있습니까?
저는 IB를 사용하고 있지만 프로그래밍적인 것에도 익숙합니다.
업데이트:
구성 요소 높이를 0으로 설정하는 것도 도움이 되지 않습니다.
저는 다음과 같은 것을 시도했습니다.
UIButton *b;
CGRect frameRect = b.frame;
frameRect.size.height = 0;
b.frame = frameRect;
제약 조건 추가(NS 레이아웃 속성)높이) 보기의 높이를 0으로 설정하는 작업이 수행되었습니다.
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.captchaView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:0]];
이 질문에 대한 모든 대답은 비효율적입니다.Android 세트 가시성을 충족하는 가장 좋은 방법:iOS에서 사라진 방법은StackView
한 후 뷰, 스택 뷰, 편집기, 편집기, 편집기, 편집기를 합니다.
IBOutlet을 사용하여 새 스택 뷰를 연결한 다음:
숨김:
UIView * firstView = self.svViewFontConfigure.arrangedSubviews[0];
firstView.hidden = YES;
가시성:
UIView * firstView = self.svViewFontConfigure.arrangedSubviews[0];
firstView.hidden = NO;
스택 뷰를 사용할 때 모든 제약 조건이 유지됩니다!
그런 다음 다음 뷰 컨트롤러 파일의 높이 제약 조건에 대한 배출구를 다음과 같이 만듭니다.
그런 다음 DidLoad 메서드에서 제약 조건 높이를 다음과 같이 0으로 변경합니다.
override func viewDidLoad() {
super.viewDidLoad()
nsLcButtonHeight.constant = 0
}
Androids를 달성하기 위해.iOS에서 GONE 기능은 UISackView를 사용하는 것입니다.그런 다음 위치별로 아이를 숨깁니다.(애플 설명서)
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/
, ▁the▁are▁set합다니▁if▁must야설▁you▁then해tically▁ver▁placed▁your정▁buttons를 설정해야 합니다.height
수평으로 에는 0으로 .width
0으로 설정하거나 둘 다 0으로 설정할 수 있습니다.
OR
은 이 해 볼 수 .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
그게 당신에게 도움이 되길 바랍니다.
이 질문은 꽤 오래되었지만 제가 발견한 가장 중요한 것은 추가적인 제약 조건을 설정하는 것입니다(그러므로 "잃어버린" 보기 주변의 보기는 누락된 후에 무엇을 해야 하는지 알 수 있습니다).
A which you want to be A
| after setting B to gone |
B C
|
C
- C에서 A로 우선 순위가 낮은(750) 제약 조건을 설정합니다.
- 배열 NSLayoutConstraint 배열 NSLayoutConstraint(를 수평으로과 오른쪽)에B의 및 제약 합니다.
bConstraints
수행 방법:- 제어 제약 조건에서 ViewController로 클릭 및 드래그
- 콘센트에서 콘센트 컬렉션으로 연결 변경
- 의 경우에는 입용력름이▁for용▁put
bConstraints
. - 연결을 누릅니다.이렇게 하면 다음이 생성됩니다.
@IBOutlet var bConstraints: [NSLayoutConstraint]!
- 추가 제약 조건 추가하기: Storyboard의 제약 조건에서 @IBOutlet 변수 이름으로 끌기
그럼 숨김 B
B.hidden = true NSLayoutConstraint.deactivateConstraints(bConstraints)
숨김 해제하기
B.hidden = false NSLayoutConstraint.activateConstraints(bConstraints)
각 보기에서 추가 제약 조건이 필요하기 때문에 보기가 점점 더 많아질수록 이는 더욱 복잡해집니다.
제가 조사한 바와 같이 AutoLayout도 도움이 되지 않습니다.선택적으로 표시된 구성요소의 영향을 받는 보기를 수동으로 교체해야 합니다(나의 경우, 모든 보기가 선택적 보기의 맨 아래에 있지만 선택적 단추의 오른쪽에 있는 모든 단추를 처리하도록 이를 조정할 수 있습니다).
- (IBAction)toggleOptionalView:(id)sender {
if (!_expanded) {
self.optionalView.frame = CGRectMake(self.optionalView.frame.origin.x, self.optionalView.frame.origin.y, self.optionalView.frame.size.width, _optionalHeight);
self.bottomView.frame = CGRectMake(self.bottomView.frame.origin.x, self.bottomView.frame.origin.y+_optionalHeight, self.bottomView.frame.size.width, self.bottomView.frame.size.height);
_expanded = YES;
} else {
self.optionalView.frame = CGRectMake(self.optionalView.frame.origin.x, self.optionalView.frame.origin.y, self.optionalView.frame.size.width, 0);
self.bottomView.frame = CGRectMake(self.bottomView.frame.origin.x, self.bottomView.frame.origin.y-_optionalHeight, self.bottomView.frame.size.width, self.bottomView.frame.size.height);
_expanded = NO;
}
}
옵션 구성 요소의 높이/폭을 하드 코딩하지 않는 것이 좋습니다. 그렇지 않으면 XIB/Storyboard를 편집할 때마다 코드가 끊어집니다.viewDidLoad에서 설정한 field float _optional Height가 있으므로 항상 최신 상태입니다.
또한 페이지 또는 페이지의 특정 셀을 지우고 전체를 재정의할 수 있습니다.그것은 빠르고 잘 작동합니다.저는 코드를 작성하지 않았지만 제가 진행하고 있는 이 기존 프로젝트에서 코드를 찾았습니다.를 작성ManagementTableSection
그리고.ManagementTableCell
모든 것을 관리하는 클래스.더 잘 정의된 코드를 제공할 수 없습니다.
Deniz가 제공한 답변을 바탕으로 Swift의 제약 조건을 사용한 솔루션을 소개합니다.
예:A_view B_view와 C_view가 그 순서대로 수직으로 정렬되어 있고 B를 "숨김"하고 차이를 조정하려면 제약 조건을 추가합니다.
B_view.removeFromSuperView()
var constr = NSLayoutConstraint(item: C_view,
attribute: NSLayoutAttribute.Top,
relatedBy: NSLayoutRelation.Equal,
toItem: A_view,
attribute: NSLayoutAttribute.Bottom,
multiplier: 1,
constant: 20)
view.addConstraint(constr)
상수는 (이 경우) C_view와 A_view 사이의 수직 공간의 양입니다.
"visible"이라는 새 속성을 사용자 지정 UIView 구현에 추가했습니다. 이 속성은 false로 설정되면 뷰 축소를 위한 제약 조건을 추가합니다(목록이 수평이므로 너비 제약 조건만 추가했지만 가장 좋은 방법은 0의 높이 제약 조건도 추가하는 것일 수 있습니다.
var visible:Bool = true{
didSet{
if(visible){
clipsToBounds = false;
removeConstraint(hideConstraint!)
}else{
clipsToBounds = true
addConstraint(hideConstraint!)
}
}
}
뷰에서 너비가 0인 제약 조건을 초기화하고 필드로 추가해야 합니다.
private var hideConstraint:NSLayoutConstraint?
func someInitFunction(){
hideConstraint = NSLayoutConstraint(item: self, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1.0, constant: 0.0)
...
}
setHidden:TRUE/FALSE는 Android View와 가장 유사합니다.사라짐/눈에 띕니다.
보기가 표시되지 않으면 보기에 공간이 필요하지 않습니다!
다른 보기 위에 ListView가 배치된 ComboBox-Alike를 만들었습니다.다음을 선택하는 동안에만 표시됩니다.
언급URL : https://stackoverflow.com/questions/17869268/ios-equivalent-for-android-view-gone-visibility-mode
'programing' 카테고리의 다른 글
'Run With PowerShell'을 사용하여 실행할 때 다른 스크립트에서 함수 호출 (0) | 2023.08.05 |
---|---|
버튼 배경이 투명함 (0) | 2023.08.05 |
코코아 포드를 사용할 때 '해당 모듈 없음'이 표시됨 (0) | 2023.08.05 |
선형 레이아웃, 상대 레이아웃 및 절대 레이아웃의 차이점은 무엇입니까? (0) | 2023.08.05 |
PHP: 기본 cURL 시간 초과 값 (0) | 2023.08.05 |