почему мое подпредставление UIView не отображается в родительском?(код прилагается) - PullRequest
17 голосов
/ 16 июля 2011

Почему мой пользовательский UIView не отображается в контейнере UIView его родителя? Итак, что у меня есть:

  • MainViewController - имеет UIView "customViewContainer" (который не занимает весь экран) и
  • CustomView - это UIView с файлом XIB - здесь UIView здесь, когда он рендерится (с AspectFit), рендерит за пределами родительского элемента "customViewContainer"

Код, используемый для настройки пользовательского представления, представляет собой этот фрагмент из MainViewController:

<< вырезать - см. Обновление2 ниже >>

Итак, я не понимаю, почему представление CustomView отображается таким образом, что его площадь больше, чем у родительского customViewContainer? Я хочу, чтобы customview вписывался в родительский "customViewContainer" полностью в соответствии с подходом AspectFit.

спасибо

РЕДАКТИРОВАТЬ 1 (добавлено уточнение) - Если я «обрезаю подпредставления» в родительском представлении, тогда происходит отсечение, но то, что мне действительно нужно для отображения пользовательского представления в области родительского представления (не вся площадь экрана). Поэтому мне нужно (а) центр настраиваемого представления быть в центре родительского представления и (б) настраиваемое представление для правильного отображения AspectFit в родительском представлении. Есть идеи?

РЕДАКТИРОВАТЬ 2 - Обновление

извините - допустил ошибку копирования / вставки с кодом в исходном вопросе - не могу отредактировать его, поэтому ниже приведу правильную версию - поясню:

MainViewController - имеет UIView "containerView" (который не занимает весь экран), а CustomView - это UIView с файлом XIB - это UIView здесь, когда он рендерится (с AspectFit), рендеринг выходит за пределы родительского элемента "containerView"

С кодом ниже это имеет смысл сейчас? Причина этого кода в том, что у меня есть пользовательский UIView, НО у меня есть связанный с ним XIB-файл, так что это был единственный способ получить представление MainController, чтобы иметь возможность его использовать. То есть иметь представление контейнера в MainController view, а затем программно добавить CustomView в представление контейнера.

Re «Итак, установите рамку или центр добавляемого вами представления таким, каким вы хотите его видеть» - вы говорите, что мне нужно программно / вручную установить размер CustomView равным тому, что я хочу ( по отношению к родительскому containerView)?

То, на что я надеялся, было то, что был способ использовать настройку склонительного раскладки, чтобы можно было сказать «Загрузить пользовательское представление из его файла XIB и аспект« Вписать это представление в self.containerView », однако я начинает задумываться, возможно ли это?

ОБНОВЛЕННЫЙ КОД НИЖЕ (допустил ошибку в исходном вопросе, когда я скопировал / вставил его и изменил имена переменных и т. Д.)

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Load the custom Altimeter View into this UIControllerView's container UIView for it
    NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:@"Customview" owner:self options:nil];
    for (NSObject *obj in nibs) {
        if ( [obj isKindOfClass:[Customview class]]) {
            Customview *cv = (Customview*)obj;
            [self.containerView addSubview:cv];
            break;
        }
    }
    // UI Layout
    self.containerView.layer.borderWidth = 2;
    self.containerView.layer.borderColor = [[UIColor redColor] CGColor];
}

1 Ответ

24 голосов
/ 16 июля 2011

Проверьте, проверено ли свойство "Clip subviews" родительского элемента в файле IB.

Clip Subviews

Я думаю, что эквивалентный код self.view.clipsToBounds = YES.

если это NO, подпредставления, которые рисуются снаружи, будут видны, как если бы они были нарисованы на родительском элементе.

...