2017-01-10 7 views
2

간단한보기 인 UIComponent가 있습니다 (문제가 좁혀졌습니다). 가 여기에 XIB 및 클래스 : 다음런타임시 UIComponent 너비를 아는 방법은 무엇입니까?

enter image description here

나는 스토리 보드에서보기에이 구성 요소를 넣어, 그 제약 조건을 설정

enter image description here

그래서 일반적으로 빨간색 사각형은 다른 폭 값은 장치 너비에 따라 다릅니다.

그래픽의 경우 구성 요소의 크기가 올바르게 조정되지만, 너비를 인쇄하는 함수를 호출하면 결과는 앱을 실행하는 장치에 관계없이 항상 동일합니다.

사실, 값은 항상 스토리 보드에서 구성 요소의 실제 너비입니다.

이것은 매우 이상합니다. UIComponent의 실제 너비를 알 수있는 방법이 있습니까?

도움을 주시면 감사하겠습니다 :)

+0

제약 조건은 어떻게 구성됩니까? – Scriptable

+0

@Eric -'print (self.frame.width)'에 대해 출력되는 값은 무엇입니까? 어떤 값이 보이거나 0을 반환합니까? 'StatBarView'에 대한 NSLayoutConstraint 값을 정확히 어떻게 설정 했습니까? 당신은 그것들을 수퍼 뷰인지 상대적인지 또는 동일한 너비로 설정 했습니까? 아니면 왼쪽과 오른쪽이 수퍼 뷰의 왼쪽과 오른쪽 가장자리에 구속되어 있습니까? – Pierce

+0

StatBarView에는 수직으로 가운데에 맞춰진 높이 수정과 왼쪽 및 오른쪽이 수퍼 뷰로 제한됩니다. 인쇄 된 값은 스토리 보드의 StatBarView 너비이며 런타임에는 너비와 일치하지 않습니다. 예를 들어 스토리 보드에 iPhone SE를 설정하면 너비는 239 픽셀이며이 값은 iPhone 7 Plus에서 실행될 때에도 사용됩니다. – Eric

답변

1

제약 조건을 설정 한 후 해당 폭을 얻기 전에 layoutIfNeeded()를 사용해야합니다. 제약 조건은 활성화 순간에 바로 적용되지 않습니다.

(답변이 2 개 이상 있습니다 ^^ 그들은 너무 다릅니다.)

+0

고마워, 작동, 너 락! !! !! – Eric

1

동시에 표시까지 모두 제약과 프레임을 사용하지 않는 것이 좋습니다. 제약 조건에 충실하고 각 요소의 너비에 대한 새로운 제약 조건을 만듭니다. 각 요소의 너비는 배율을 통해 부모 뷰의 너비와 관련되어야합니다.

는 예를 들어 당신이 새와 함께 기존의 제약 조건을 교체해야을 변경하려는 경우 요소가 parentView 폭 그런

의 50 %를 차지하려면이

NSLayoutConstraint(item: element, attribute: .width, relatedBy: .equal, toItem: parentView, attribute: .width, multiplier: 0.5, constant: 0) 

같은 것을해야한다 하나는 새로운 원하는 승수입니다. 승수 속성은 단지 얻을 수 있기 때문에 교체와 같은 셔플이 존재하기 때문에

그리고 내 대답은 귀하의 구성 요소 안에있는 모든 요소가 차지하는 너비의 %를 변경하려는 경우에 대한 방법으로했다. propotions가 항상 같으면 (50 % 25 % 25 %) 구성 요소가 크기를 변경하면 제약 조건을 변경할 필요가 없습니다. 구성 요소의 크기 제한과 관련된 모든 요소는 제한을 통해 구성 요소의 크기를 변경할 경우

+0

도와 주셔서 감사합니다 @Pavel.내 변수의 설정자에서이 행을 구현하려고 시도했지만 "제약 조건이 준비되지 않은 뷰 계층 구조"와 충돌합니다. 어쨌든, 백분율 값을 설정할 때 하위보기 크기가 조정되지만 부모의 너비가 올바르지 않은 것으로 계산됩니다. 그게 내 문제 야. 나는 왜'self.frame.width'가 런타임에서 값을 얻지 못하는지 이해하지 못한다. 그러나 스토리 보드에서 값을 얻는다. (게다가 나는 제약으로 설정하지 않았다.) – Eric