Установите правильный зазор между рамкой text.view и рамкой кнопки

У меня есть текстовое представление и кнопки. По какой-то причине я получил неожиданный результат при попытке установить правильный зазор между этими двумя элементами. Я думаю, что может быть неправильное вычисление кадра text.view. Вот как мне удается установить рамку text.view:

//1 Setting properties for text, starting with dictionary containing font size and family
    NSDictionary *stringAttributes = [NSDictionary dictionaryWithObject:[UIFont fontWithName:@"helvetica neue"
                                                                                        size:14]
                                                                 forKey: NSFontAttributeName];

    //Creating frame to hold textView
    CGSize maximumLabelSize = CGSizeMake(self.myTextView.frame.size.width, FLT_MAX);
    CGSize textViewSize = [self.descriptionStringShort boundingRectWithSize:maximumLabelSize
                                                                    options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin
                                                                 attributes:stringAttributes context:nil].size;

    //Setting frame
    CGRect frame = self.myTextView.frame;
    frame.size.height = textViewSize.height;

    NSLog(@"%f height", frame.size.height);
    self.myTextView.frame = frame;

После этого при попытке установить рамки кнопок он всегда показывает различный разрыв между этими элементами (мои «грубые» решения - проверить высоту text.view и установить «минимум» и «максимум» y зависит от него, но это не не работает в реальном приложении). Например, фрейм кнопки может быть отрисован на textView.frame или намного ниже него. Вот как я устанавливаю фрейм карты:

CGRect mapButtonFrame = self.mapButton.frame;
    mapButtonFrame.origin.x = 30;

    if (frame.size.height < 50){
    mapButtonFrame.origin.y = (200+frame.size.height + 150);
    }   else  if (frame.size.height >300){
        mapButtonFrame.origin.y = (200+frame.size.height +50);
    }   else {
        mapButtonFrame.origin.y = (200+frame.size.height +100);
    }
    self.mapButton.frame = mapButtonFrame;

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

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

Здесь, как видите, всегда разный зазор между 2-мя элементами. Как я могу исправить это? Кстати, автоматическая раскладка отключена. Буду рад любым советам, спасибо1


person Evgeniy Kleban    schedule 24.09.2014    source источник
comment
Вы рассматривали возможность использования AutoLayout?   -  person Ayu    schedule 24.09.2014
comment
Нет, спасибо за упоминание, я редактирую пост.   -  person Evgeniy Kleban    schedule 24.09.2014
comment
Ну, во-первых, я думаю, ваш шрифт должен быть написан как HelveticaNeue. helvetica neue просто даст вам системный шрифт.   -  person streem    schedule 24.09.2014


Ответы (1)


Это должно работать нормально:

[myTextView sizeToFit];//This will change the textView frame according to the text length

CGRect bFrame = self.mapButton.frame;
bFrame.origin.y = myTextView.frame.size.height + 20.0f;// The gap you want between the text and the button
self.mapButton.frame = bFrame;
person Ayu    schedule 24.09.2014
comment
Извините, не помогло (отрисовывает карту на фрейме textView) - person Evgeniy Kleban; 24.09.2014
comment
Где вы хотите, чтобы карта была точно? - person Ayu; 24.09.2014
comment
На самом деле все равно, чуть ниже определенных (фиксированных) точек под рамкой text.view (эта рамка каждый раз имеет разный размер, потому что каждый раз при загрузке она содержит разный текст). - person Evgeniy Kleban; 24.09.2014
comment
Если я правильно понимаю, то между текстом и кнопкой есть вид (карта). Правильный? - person Ayu; 24.09.2014
comment
Нет аю, только рамка textView и кнопки (как указано на скриншотах) - person Evgeniy Kleban; 24.09.2014
comment
Ну, мой первоначальный ответ должен работать, я проверил его, должно быть что-то еще, что его ломает. Удалите весь код и оставьте только то, что есть в моем ответе, и, конечно же, установите текст. - person Ayu; 24.09.2014
comment
Давайте продолжим обсуждение в чате. - person Ayu; 24.09.2014