2011-12-23 1 views
2

(내 영어 아주 잘 LOL 아니다) 내가 subview.bounds을 변경할 때 내가있는 UIView의 bounds.size.height 변경하는 경우에 frame.origin.y 변화

난, 하위 뷰를 같이하여 UIView 객체를 정의했다. size.height, subview.frame.origin.y가 변경되었습니다. 내 코드에 문제가 있습니까?

여기 내 코드입니다 :

- (IBAction)touch 
{ 
    static int i = 1; 
    NSLog(@"%d: Bounds: %@", i, NSStringFromCGRect(self.subView.bounds)); 
    NSLog(@"%d: Frame: %@", i, NSStringFromCGRect(self.subView.frame)); 
    self.subView.bounds = CGRectMake(0.f, 0.f, self.subView.bounds.size.width, self.subView.bounds.size.height + 50); 
    NSLog(@"%d: Bounds: %@", i, NSStringFromCGRect(self.subView.bounds)); 
    NSLog(@"%d: Frame: %@", i, NSStringFromCGRect(self.subView.frame)); 

    i++; 
} 

시스템 출력 : 실제로 프레임에 어떤 영향을 미치는가 경계를 변경

2011-12-23 12:11:29.316 Angry[7959:f803] 1: Bounds: {{0, 0}, {320, 100}} 
2011-12-23 12:11:29.318 Angry[7959:f803] 1: Frame: {{0, 0}, {320, 100}} 
2011-12-23 12:11:29.319 Angry[7959:f803] 1: Bounds: {{0, 0}, {320, 150}} 
2011-12-23 12:11:29.320 Angry[7959:f803] 1: Frame: {{0, -25}, {320, 150}} 

2011-12-23 12:11:30.920 Angry[7959:f803] 2: Bounds: {{0, 0}, {320, 150}} 
2011-12-23 12:11:30.921 Angry[7959:f803] 2: Frame: {{0, -25}, {320, 150}} 
2011-12-23 12:11:30.922 Angry[7959:f803] 2: Bounds: {{0, 0}, {320, 200}} 
2011-12-23 12:11:30.923 Angry[7959:f803] 2: Frame: {{0, -50}, {320, 200}} 

2011-12-23 12:11:32.080 Angry[7959:f803] 3: Bounds: {{0, 0}, {320, 200}} 
2011-12-23 12:11:32.082 Angry[7959:f803] 3: Frame: {{0, -50}, {320, 200}} 
2011-12-23 12:11:32.083 Angry[7959:f803] 3: Bounds: {{0, 0}, {320, 250}} 
2011-12-23 12:11:32.084 Angry[7959:f803] 3: Frame: {{0, -75}, {320, 250}} 

답변

6

: 당신이 프레임을 변경할 수 있지만

을, 경계, 및 가운데 속성 다른 속성과 다른 속성에 대한 변경 내용은 다른 속성에 적용됩니다.다음과 같은 방법으로3210 : 당신이 프레임 속성을 설정하면

  • , bounds 속성의 크기 값은 변화는 프레임 사각형의 새로운 크기와 일치합니다. 중심 속성의 값이 비슷하게 프레임 사각형의 새 중심점과 일치하도록 변경됩니다.
  • center 속성을 설정하면 프레임의 원점 값이 그에 따라 으로 변경됩니다.
  • bounds 속성의 크기를 설정하면 프레임 속성의 크기 값이 바운드 사각형의 새 크기와 일치하도록 변경됩니다.
+0

예, 당신이 옳다. 그러나 UIView.bounds.size.height가 변경되어 UIView.frame.origin.y도 변경되었습니다. 너무 이상해 보입니다. Apple 설명서에는 이에 대한 정의가 없습니다. – LekHo

+0

다음은 문서 링크입니다. https://developer.apple.com/library/ios/documentation/windowsviews/conceptual/viewpg_iphoneos/WindowsandViews/WindowsandViews.html – cyrilchampier

0

내가 했어 비슷한 문제 :

view.frame = CGRectMake(x, y, width, height); // y felt to 0 

문제는 높이에 있었다, 나는 음의 높이를 설정하기 위해 노력했다. 확실하지는 않지만 나쁜 뷰 매개 변수를 자동으로 튜닝하는 방법에 대해 읽었지만 웹에서 아무 것도 발견하지 못했습니다. CGRect 매개 변수를 확인할 수 있습니다.

희망이 누구인가 도움을 청합니다.

2

방금 ​​같은 문제가 발생했습니다. 뷰의 범위를 변경하면 뷰의 중심에있는 앵커 포인트를 기준으로 해당 뷰의 크기가 조정됩니다. 즉, 프레임 (0,0,0,0)을 가진 뷰가 있고 그 경계가 (0,0,100,100)으로 변경되면 새 프레임은 (-50, -50, 100, 100)이됩니다.

가장 빠른 해결 방법은 경계를 변경하기 전에 프레임의 출처를 기억 한 후 나중에 원래 값으로 다시 프레임의 원점을 설정 :

CGPoint originBeforeResize = self.frame.origin; 
self.bounds = CGRectMake(0, 0, SOME_NEW_WIDTH, SOME_NEW_HEIGHT); 
self.frame = CGRectMake(originBeforeResize.x, originBeforeResize.y, 
         self.frame.size.width, self.frame.size.height);