코드를 사용하여 AutoLayout Tomes 구현
13610 단어 AutoLayoutXcodeiOS
Xcode8.2
Swift3
하고 싶은 일
가로로 배열된 객체의 표시 숨기기를 전환하고 숨겨진 객체를 채워 표시합니다.
참고 문헌: 익숙한 AutoLayout 책
예를 들어, 위의 스크린 스냅샷
HogeButton
을 숨기면 아래 설명된 스크린 스냅샷 처럼 HogeButton
을 숨기고 UIButton이 있는 공간을 채워 표시합니다.실패 예
숨기기만 가짜로 설정하면 대상은 숨겨지지만 공간은 있습니다.
UIButton.isHidden = true
제약조건 추가
Intrinsic size에서 지정한 너비를 0으로 설정하는 제약조건을 추가합니다.
너비 0의 제약조건을 정의하고 숨길 때 제약조건을 추가합니다.표시할 때 제약조건을 삭제합니다.
// ボタンの横幅を0にする制約
let buttonWidthConstraint = NSLayoutConstraint(
item: self.button
, attribute: NSLayoutAttribute.width
, relatedBy: NSLayoutRelation.equal
, toItem: nil
, attribute: NSLayoutAttribute.width
, multiplier: 1.0
, constant: 0)
IBOutlet을 사용하여 객체 간의 너비 구속조건 연결하기
구속 조건을 스토리보드에서 파일로 드래그합니다.
IBOutlet으로 연결할 수 있으면 다음과 같이 파일에 코드가 생성됩니다.얘 이름
buttonLeadingConstraint
숨길 때 제약조건 변경
if button.isHidden {
// IBOutletで接続した制約
buttonLeadingConstraint.constant = 8
// 制約を削除する
NSLayoutConstraint.deactivate([buttonWidthConstraint])
button.isHidden = false
}
else {
buttonLeadingConstraint.constant = 0
// 制約を追加する
NSLayoutConstraint.activate([buttonWidthConstraint])
button.isHidden = true
}
}
총결산
숨기고 표시하는 시기에 제약을 변경함으로써 예상한 동작을 실현했다.
만약 이런 더 좋은 방법이 있다면 나에게 알려주시오
//
// ViewController.swift
// IntrinsicTorutsumeSample
//
// Created by { Kazunori } on 2017/02/02.
// Copyright © 2017年 Yamamoto Kazunori. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
@IBOutlet weak var label: UILabel!
@IBOutlet weak var switchButton: UISwitch!
@IBOutlet weak var buttonLeadingConstraint: NSLayoutConstraint!
@IBOutlet weak var labelLeadingConstraint: NSLayoutConstraint!
@IBOutlet weak var switchLeadingConstraint: NSLayoutConstraint!
@IBOutlet weak var switchWidthConstraint: NSLayoutConstraint!
var buttonWidthConstraint: NSLayoutConstraint!
override func viewDidLoad() {
// ボタンの横幅を0にする制約
buttonWidthConstraint = NSLayoutConstraint(
item: self.button
, attribute: NSLayoutAttribute.width
, relatedBy: NSLayoutRelation.equal
, toItem: nil
, attribute: NSLayoutAttribute.width
, multiplier: 1.0
, constant: 0)
}
@IBAction func pressToolbarLabel(_ sender: Any) {
if label.text == nil {
label.text = "HogeGehoString"
labelLeadingConstraint.constant = 8
}
else {
label.isHighlighted = true
label.text = nil
labelLeadingConstraint.constant = 0
}
}
@IBAction func pressToolbarButton(_ sender: Any) {
if button.isHidden {
buttonLeadingConstraint.constant = 8
NSLayoutConstraint.deactivate([buttonWidthConstraint])
button.isHidden = false
}
else {
buttonLeadingConstraint.constant = 0
NSLayoutConstraint.activate([buttonWidthConstraint])
button.isHidden = true
}
}
@IBAction func pressToolbarSwitch(_ sender: Any) {
if switchButton.isHidden {
switchLeadingConstraint.constant = 8
switchWidthConstraint.constant = 49
switchButton.isHidden = false
}
else {
switchLeadingConstraint.constant = 0
switchWidthConstraint.constant = 0
switchButton.isHidden = true
}
}
}
화면 스냅샷의 다른 객체를 표시하고 숨기는 예시를 만들었습니다.
Reference
이 문제에 관하여(코드를 사용하여 AutoLayout Tomes 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kazTera/items/78b1045da8eebd39eed3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)