Как изменить размер UISwitch? - PullRequest
46 голосов
/ 01 июня 2010

Я сделал пользовательский UISwitch (из этого поста) . Но проблема в том, что мои собственные тексты немного длинные. Есть ли способ изменить размер переключателя? [Я пытался setBounds, не работал]

Edit:

Вот код, который я использовал:

@interface CustomUISwitch : UISwitch    
- (void) setLeftLabelText: (NSString *) labelText;
- (void) setRightLabelText: (NSString *) labelText;    
@end

@implementation CustomUISwitch

- (UIView *) slider 
{ 
    return [[self subviews] lastObject]; 
}
- (UIView *) textHolder 
{ 
    return [[[self slider] subviews] objectAtIndex:2]; 
}
- (UILabel *) leftLabel 
{ 
    return [[[self textHolder] subviews] objectAtIndex:0]; 
}
- (UILabel *) rightLabel 
{ 
    return [[[self textHolder] subviews] objectAtIndex:1]; 
}
- (void) setLeftLabelText: (NSString *) labelText 
{ 
    [[self leftLabel] setText:labelText]; 
}
- (void) setRightLabelText: (NSString *) labelText 
{ 
    [[self rightLabel] setText:labelText]; 
}
@end

mySwitch = [[CustomUISwitch alloc] initWithFrame:CGRectZero];

//Tried these, but did not work
//CGRect aFrame = mySwitch.frame;
//aFrame.size.width = 200;
//aFrame.size.height = 100;
//mySwitch.frame = aFrame;

[mySwitch setLeftLabelText: @"longValue1"];
[mySwitch setRightLabelText: @"longValue2"];

Ответы [ 8 ]

175 голосов
/ 25 июля 2011

Самый простой способ - изменить его размер как представление:

 UISwitch *mySwitch = [[UISwitch alloc] init];
 mySwitch.transform = CGAffineTransformMakeScale(0.75, 0.75);

и тебе больше ни о чем не нужно заботиться!

19 голосов
/ 24 мая 2017

Вот быстрый вариант ответа mxg:

let mySwitch = UISwitch()
mySwitch.transform = CGAffineTransform(scaleX: 0.75, y: 0.75)
7 голосов
/ 01 июня 2010

Многие элементы управления предназначены для определенного размера. Если бы вы реализовывали это самостоятельно, вы бы переопределили setFrame:, скорректировали параметр frame в соответствии с требуемым размером вашего элемента управления, а затем передали его в [super setFrame:].

Если вы создаете подкласс для элемента управления с таким поведением, на самом деле нет способа переопределить его, потому что ваш подкласс унаследует реализацию суперкласса setFrame:, которая изменяет ваш прямоугольник фрейма. И нет способа установить кадр вашего управления без вызова [super setFrame:].

Скорее всего, вам придется наследовать от UIControl и реализовать свойства / поведения, которые вы хотите от UISwitch, вручную, чтобы обойти это.

4 голосов
/ 01 июня 2010

UISwitch не предназначен для настройки.

Я думаю, что ваше лучшее решение - это загрузить одну из реализаций пользовательских переключателей, упомянутых в другом вопросе, на который вы ссылались. Либо UICustomSwitch , либо RCSwitch . Они оба должны уметь работать с широкими этикетками.

3 голосов
/ 09 апреля 2012

Нет опции для изменения размера uiswitch в xib, поэтому нужно создать и изменить его размер в классе контроллера,

     UISwitch *onoff = [[UISwitch alloc] initWithFrame: CGRectMake(0, 0, 10, 10)];
     onoff.transform = CGAffineTransformMakeScale(0.50, 0.50);
     [self.view addSubview:onoff];
2 голосов
/ 26 сентября 2015

Если вы хотите изменить размер переключателя, вставленного через раскадровку или перо, вы можете создать подкласс UISwitch и переопределить метод awakeFromNib:

- (void)awakeFromNib {
    self.transform = CGAffineTransformMakeScale(0.75, 0.75);
}

Выберите элемент управления переключателем и измените его класс на собственный класс переключателя.

enter image description here

1 голос
/ 12 июля 2012

Вот решение в коде:

UISwitch *mySwitchNewsletter = [[UISwitch alloc] initWithFrame: CGRectMake(varSettingsSwitchNewsletter_x, 
                                                                           varSettingsSwitchNewsletter_y, 
                                                                           varSettingsSwitchNewsletter_width, 
                                                                           varSettingsSwitchNewsletter_height)];
if (mySwitchNewsletter != nil) {

    [varCommerceSettingsView addSubview:mySwitchNewsletter];


    float mySwitchScaleFactor = (varSettingsSwitchNewsletter_scale / 100.0);


    CGFloat dX=mySwitchNewsletter.bounds.size.width/2, dY=mySwitchNewsletter.bounds.size.height/2;
    mySwitchNewsletter.transform = CGAffineTransformTranslate(CGAffineTransformScale(CGAffineTransformMakeTranslation(-dX, -dY), mySwitchScaleFactor, mySwitchScaleFactor), dX, dY);

    mySwitchNewsletter release];
}

Где varSettingsSwitchNewsletter_scale представляет собой целое число от 0 до 100 (%).

0 голосов
/ 24 января 2016
// Just in case someone trying to hard code UISwitch in Xcode 6.4 the following is working
// in .h
@property UISwitch * onoff;

// in .m

self.onoff = [[UISwitch alloc] initWithFrame:CGRectMake(160, 40, 0, 0)];
_onoff.transform = CGAffineTransformMakeScale(0.50, 0.50);
[self.view addSubview:self.onoff];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...