代码之家  ›  专栏  ›  技术社区  ›  mshsayem

如何调整UISwitch的大小?

  •  45
  • mshsayem  · 技术社区  · 14 年前

    我已经做了一个决定 custom UISwitch (from this post) . 但问题是,我的自定义文本有点长。有没有办法调整开关的大小[我试过了 setBounds ,不起作用]

    @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 回复  |  直到 7 年前
        1
  •  186
  •   sunkehappy kishorer747    11 年前

    最简单的方法是将其调整为视图:

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

    你不必关心其他任何事情!

        2
  •  23
  •   Beninho85    7 年前

    以下是mxg的swift 3版本答案:

    let mySwitch = UISwitch()
    mySwitch.transform = CGAffineTransform(scaleX: 0.75, y: 0.75)
    
        3
  •  7
  •   Alex    14 年前

    许多控件都是特定大小的。如果你自己实现这个,你会重写 setFrame: ,调整frame参数以匹配控件所需的大小,然后将其传递给 [super setFrame:] .

    如果将具有此行为的控件子类化,则实际上无法重写它,因为子类将继承超类的实现 设置帧: .

    你很可能得继承 UIControl 实现你想要的属性/行为 UISwitch

        4
  •  4
  •   progrmr    14 年前

    UISwitch不是为定制而设计的。

    我认为您最好的解决方案是下载您提到的另一个问题中提到的一个自定义交换机实现。或者 UICustomSwitch RCSwitch

        5
  •  3
  •   saba    12 年前

    在xib中没有调整uiswitch大小的选项,所以需要在controller类中创建并调整它的大小,

         UISwitch *onoff = [[UISwitch alloc] initWithFrame: CGRectMake(0, 0, 10, 10)];
         onoff.transform = CGAffineTransformMakeScale(0.50, 0.50);
         [self.view addSubview:onoff];
    
        6
  •  2
  •   Prajeet Shrestha    9 年前

    如果要调整通过故事板或nib的开关的大小,可以将UISwitch子类化并重写awakeFromNib方法:

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

    选择开关控件并将其类更改为自定义开关类。

    enter image description here

        7
  •  1
  •   Al-Noor Ladhani    12 年前

    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];
    }
    

        8
  •  0
  •   Aruna    8 年前
    // 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];