2017-12-30 18 views
0

그래서 나는 다음 UIKit 요소를 UIViewController에 추가하여 나타나는 시뮬레이션을 제어합니다. 나는 많은 배치 코드를 써야 할 것으로 예상했지만, 대신에 모든 것이 완벽하게 아무런 장치도 아닌 것처럼 보였다. 나의 질문은 왜 그런가?UIKitView에 객체를 추가 할 때 객체의 위치와 크기가 완벽하게 왜 왜 생깁니 까?

let menuButton = UIButton() 
let statusLabel = UILabel() 
let segmentedLabel = UISegmentedControl(items: ["None", "Glow", "Cloud"]) 
func initializeUI() { 
    //The menu button that opens up the options for the simulations 
    menuButton.layer.borderColor = UIColor.lightGray.cgColor 
    menuButton.layer.borderWidth = 1 
    menuButton.layer.cornerRadius = 5 
    menuButton.layer.backgroundColor = UIColor.darkGray.cgColor 
    menuButton.showsTouchWhenHighlighted = true 
    menuButton.imageView?.contentMode = UIViewContentMode.scaleAspectFit 
    menuButton.setImage(UIImage(named: "hamburger.png"), for: UIControlState.normal) 
    menuButton.addTarget(self, action: #selector(menuPress), for: UIControlEvents.touchDown) 
    view.addSubview(menuButton) 

    //Will display the status of the simulation 
    statusLabel.text = "Particle Simulation" 
    statusLabel.textColor = UIColor.darkGray 
    view.addSubview(statusLabel) 

    //Will display visual options 
    view.addSubview(segmentedLabel) 
} 

각 요소의 크기는 완벽하며 중첩되지 않습니다. 라벨은 왼쪽 하단에 있으며 버튼은 오른쪽 하단에 있으며 분할 된보기는 내 가로 앱의 왼쪽 상단에 있습니다.

나는 이러한 객체를 프로그래밍 방식으로 배치하기를 원한다면 어떻게해야할까요? 요소는 내가 작업 할 수있는 속성 위치가 없으며 메뉴 버튼을 매우 높게 만들지 않는 menuButton.frame.size.height *= 20과 같은 것을하면됩니다.

+0

이것은 UIKit 동작입니다. 내가 보지 못한이 효과를 만들어내는 코드가 작성되었습니다. –

답변

0

이 작동하는 이유는 예제의 모든 UI 항목이 고유 한 프레임을 만들 수 있도록 "내장"콘텐츠 크기를 갖기 때문입니다. 동일한 방식으로 표준 UIView를 추가하면 운이 없어집니다. 또한 뷰는 자동 크기 조정 마스크 (스프링 및 스트럿이라고도 함)를 사용하여 초기 프레임을 기반으로 자체 제약 조건을 작성합니다.

마지막으로 항목을 배치하려면 프레임을 직접 설정하십시오. 그냥 수학. 행운을 빕니다.

본질적인 콘텐츠 크기를 이해하는 데 매우 중요합니다. 일부 프레임 변경 자동 제약을 해제해야 할 수도 있지만 보통의 경우이 아니라 당신의 버튼을 사용하여 문제가 될 수 내가 잘못 생각을했기 때문에 주제에서 벗어난 나는이 질문을 닫으 투표 해요

UIView.translatesAutoresizingMaskIntoConstraints = false 
+0

항목이 있어야하는 위치에 대해 수학을 할 수는 있지만 위치와 크기를 편집 할 때 어떤 속성을 사용해야합니까? 나는 그것을 편집 할 수있는 속성을 찾을 수 없습니다. –

+0

UIButton의 변형 및 중심 특성을 편집했지만 set 호출이 필요하다고 표시하더라도 변경하지 않으며 하위 뷰로 추가 한 후에 변환을 수행합니다. –

관련 문제