frame.origin.y изменяется, когда я изменяю bounds.size.height UIVIew - PullRequest
2 голосов
/ 23 декабря 2011

(мой английский не очень хорошо LOL)

Я определил объект UIView как подпредставление, когда я изменяю subview.bounds.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}}

Ответы [ 3 ]

7 голосов
/ 23 декабря 2011

изменение границ действительно влияет на фрейм:

Хотя вы можете изменять свойства фрейма, границ и центра независимо от других, изменения одного свойства влияют на другие следующим образом:

  • Когда вы устанавливаете свойство frame, значение размера в свойстве bounds изменяется, чтобы соответствовать новому размеру прямоугольника рамки.Значение в свойстве center аналогично изменяется, чтобы соответствовать новой центральной точке прямоугольника рамки.
  • Когда вы устанавливаете свойство center, значение источника в кадре изменяется соответственно.
  • Когда вы устанавливаете размер свойства bounds, значение размера в свойстве frame изменяется в соответствии с новымразмер прямоугольника границ.
3 голосов
/ 10 марта 2013

Я просто столкнулся с той же проблемой.Оказывается, что изменение границ в представлении изменит размер этого представления относительно точки привязки, которая находится в центре представления.Другими словами, если у вас есть вид с рамкой (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); 
0 голосов
/ 21 августа 2012

У меня были похожие проблемы:

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

Проблема была в высоте, я пытался установить отрицательную высоту. Не уверен, но я прочитал кое-что о автоматической настройке плохих параметров просмотра, но ничего не нашел в Интернете. Таким образом, вы можете проверить параметры CGRect.

Надеюсь, это поможет кому-нибудь

...