Почему UIButton перемещает метку заголовка полностью вправо, когда я устанавливаю вставки содержимого, чтобы переместить ее вниз?

Я пытаюсь сделать UIButton с изображением над текстом. С этой целью я попытался установить краевые вставки кнопки следующим образом:

[button setImageEdgeInsets:UIEdgeInsetsMake(0.0f, 0.0f, 10, 0.0f)];
[button setTitleEdgeInsets:UIEdgeInsetsMake(10, 0.0, 0.0, 0.0)];

Что я получаю, так это кнопку, где изображение находится в том же месте, а текст сплющен полностью в сторону, в пространстве шириной около одного символа.

Как я могу просто установить вставки, чтобы у меня было изображение над текстом? Это действительно так много, чтобы спросить?


person s73v3r    schedule 17.06.2013    source источник
comment
Проверьте это: stackoverflow.com/questions/2808078/   -  person marchinram    schedule 18.06.2013


Ответы (1)


Вы просто неправильно рассчитали edgeInSets. Они не такие, как вы думаете. Вот мой тестовый код. Мне потребовалось некоторое время, чтобы поместить изображение и заголовок в нужное место.

UIButton *tmp_testBtn = [[UIButton alloc] initWithFrame:CGRectMake(50, 200, 60, 40)];
tmp_testBtn.backgroundColor = [UIColor grayColor];
[tmp_testBtn setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 20, 0)];
[tmp_testBtn setImage:[UIImage imageNamed:@"France"] forState:UIControlStateNormal];
[tmp_testBtn setTitleEdgeInsets:UIEdgeInsetsMake(20, -258, 0, 0)];
[tmp_testBtn setTitle:@"testbutton" forState:UIControlStateNormal];

CGRect contentRect = [tmp_testBtn contentRectForBounds:tmp_testBtn.bounds];
NSLog(@"contenRect:%f,%f,%f,%f",contentRect.origin.x,contentRect.origin.y,contentRect.size.width,contentRect.size.height);
CGRect titleRect = [tmp_testBtn titleRectForContentRect:contentRect];
NSLog(@"titleRect:%f,%f,%f,%f",titleRect.origin.x,titleRect.origin.y,titleRect.size.width,titleRect.size.height);
CGRect imageRect = [tmp_testBtn imageRectForContentRect:contentRect];
NSLog(@"imageRect:%f,%f,%f,%f",imageRect.origin.x,imageRect.origin.y,imageRect.size.width,imageRect.size.height);

[self.view addSubview:tmp_testBtn];
[tmp_testBtn release];

Кстати, я так делать не буду. Я предпочитаю настраивать кнопку с добавлением UIImageView и UILabel.

person Hunter    schedule 18.06.2013
comment
Я не совсем понимаю, как пришли к числам, которые вы использовали. У вас есть UIButton шириной 60 и высотой 40. Вы вставляете изображение 20 внизу. Но тогда, когда вы идете вставлять текст, вы делаете 20 слева и -258 сверху? Думаю, я понимаю, почему он отрицательный, но почему величина больше, чем у кнопки? - person s73v3r; 18.06.2013
comment
О, если вы печатаете прямоугольник кадра или любой другой CGRect, есть функция NSStringFromCGRect, которая распечатает ваш прямоугольник в удобном формате и означает, что вам не нужно так много печатать в своих операторах NSLog;) - person s73v3r; 19.06.2013
comment
Да, большое спасибо. Это сэкономит мне много работы. Я сделал это ранее: [tmp_testBtn setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 20, 0)]; ];, и NSLog titleRect дал мне это: titleRect:256.000000,30.000000,-196.000000,0.000000, что меня тоже беспокоит. 258 слева - person Hunter; 19.06.2013