iOS: self.view.bounds не заполняет все окно целиком

#ios #uiview #uiviewcontroller #calayer #iphone-4

#iOS #uiview #uiviewcontroller #calayer #iphone-4

Вопрос:

Я провожу несколько простых тестов добавления CALayer в UIView. В моем основном классе контроллера приложения для iPhone 4 я реализовал viewDidLoad метод как таковой:

 - (void)viewDidLoad
{
    [super viewDidLoad];

    NSLog(@"%s", __PRETTY_FUNCTION__);

    CALayer* ca = [[CALayer alloc] init];
    [ca setBounds:self.view.bounds];

    [ca setBackgroundColor:[[UIColor blueColor] CGColor]];

    [self.view.layer addSublayer:ca];
}
  

Синий фон занимает всего 1/4 экрана.

введите описание изображения здесь

Интересно, не потому ли это, что я не принял во внимание дисплей retina? Какова наилучшая практика в этой ситуации?


Добавлены эти сообщения отладки:

 NSLog(@"frame w:%f h:%f", self.view.frame.size.width, self.view.frame.size.height);
NSLog(@"bounds w:%f h:%f", self.view.bounds.size.width, self.view.bounds.size.height);
  

Выходной сигнал:

 frame w:320.000000 h:460.000000
bounds w:320.000000 h:460.000000
  

Комментарии:

1. Каково значение self.view.frame ? Можете ли вы подтвердить.

2. @Deepak: Это {ширина: 320, высота: 460}. Добавлен вывод отладки и к самому вопросу.

Ответ №1:

setContentsScale не имеет эффекта

   [ca setContentsScale:[[UIScreen mainScreen] scale]];
  

Однако, если я использую

   [ca setFrame:self.view.bounds];
  

это работает.

Комментарии:

1. 1 Хороший! При position равном нулю остальная часть содержимого исчезла с экрана.

2. @Deepak: Я вижу! Таким образом, CALayer позиционирует себя на основе позиции / точки привязки, которая находится в центральной точке границ. Большое спасибо за вашу помощь.

3. Вы это поняли. Я просто интерпретировал. 🙂