Ответ 1
Самый простой способ - изменить его размер как вид:
UISwitch *mySwitch = [[UISwitch alloc] init];
mySwitch.transform = CGAffineTransformMakeScale(0.75, 0.75);
и вам не нужно заботиться ни о чем другом!
Я создал пользовательский 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"];
Самый простой способ - изменить его размер как вид:
UISwitch *mySwitch = [[UISwitch alloc] init];
mySwitch.transform = CGAffineTransformMakeScale(0.75, 0.75);
и вам не нужно заботиться ни о чем другом!
Вот версия mxg с быстрым 3:
let mySwitch = UISwitch()
mySwitch.transform = CGAffineTransform(scaleX: 0.75, y: 0.75)
Многие элементы управления предназначены для определенного размера. Если вы выполняете это самостоятельно, вы переопределяете setFrame:
, корректируете параметр кадра в соответствии с требуемым размером элемента управления, а затем передаете его на [super setFrame:]
.
Если вы подклассифицируете элемент управления, который имеет такое поведение, его невозможно переопределить, потому что ваш подкласс наследует реализацию суперкласса setFrame:
, которая изменяет ваш прямоугольник кадра. И нет способа установить кадр вашего контроля, не вызывая [super setFrame:]
.
Скорее всего, вам придется наследовать от UIControl
и реализовать свойства/поведение, которые вы хотите от UISwitch
вручную, чтобы обойти это.
UISwitch не предназначен для настройки.
Я думаю, что ваше лучшее решение - загрузить одну из пользовательских реализаций коммутатора, упомянутых в другом вопросе, о котором вы говорили. Либо UICustomSwitch или RCSwitch. Они оба должны иметь возможность обрабатывать широкие метки.
Нет значения для изменения размера uiswitch в xib, поэтому необходимо создать и изменить его размер в классе контроллера,
UISwitch *onoff = [[UISwitch alloc] initWithFrame: CGRectMake(0, 0, 10, 10)];
onoff.transform = CGAffineTransformMakeScale(0.50, 0.50);
[self.view addSubview:onoff];
Если вы хотите изменить размер переключателя, поставленного через Storyboard или nib, вы можете подклассифицировать UISwitch и переопределить метод awakeFromNib:
- (void)awakeFromNib {
self.transform = CGAffineTransformMakeScale(0.75, 0.75);
}
Выберите переключатель и измените его класс на свой собственный класс коммутатора.
Вот решение в коде:
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 - это int от 0 до 100 (%).
// 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];