Comment redimensionner une UISwitch?
J'ai fait un personnalisé UISwitch (à partir de ce post). Mais le problème est, à mon habitude, les textes sont un peu long. Est-il possible de redimensionner l'interrupteur? [J'ai essayé setBounds
, n'a pas de travail]
Edit:
Voici le code que j'ai utilisé:
@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"];
- Êtes-vous à l'aide de UISwitch (à partir de votre sujet) ou UICustomSwitch (à partir de votre lien)? Le UICustomSwitch classe est en fait un UISlider.
- mais il hérite UISwitch, comment peut-il être un curseur?
- UICustomSwitch hérite de UISlider. Lequel utilisez-vous? Votre code dit CustomUISwitch, votre sujet dit UISwitch, mais le lien que vous avez donné des points à un UICustomSwitch mise en œuvre? Nous ne pouvons pas répondre à votre question, très bien, à moins que vous dire lequel des 3 vous vraiment le but!
- Désolé, Maintenant, j'ai ajouté le code.
- mshsayem, je pense que vous devriez prendre en considération la modification de la sélectionné réponse correcte.
Vous devez vous connecter pour publier un commentaire.
La façon la plus simple est de le redimensionner, qu'une vue de l':
et vous n'avez pas à vous soucier de rien d'autre!
Ici est la swift 3 version de mxg réponse:
De nombreux contrôles sont destinés à être une taille spécifique. Si vous avez été la mise en œuvre de ce vous-même, vous devez substituer
setFrame:
, réglez le paramètre image pour correspondre à votre contrôle de la taille, et de passer ensuite que[super setFrame:]
.Si vous sous-classe d'un contrôle qui a ce comportement, il n'y a vraiment aucun moyen de le remplacer parce que votre sous-classe héritera de la super-classe de mise en œuvre de
setFrame:
, qui modifie votre cadre rectangle. Et il n'y a aucun moyen de définir le cadre de votre contrôle sans appel[super setFrame:]
.Vous aurez plus de chances à hériter de
UIControl
et de mettre en œuvre les propriétés et comportements que vous voulez deUISwitch
manuellement pour contourner ce problème.UISwitch n'est pas conçu pour être personnalisé.
Je pense que le votre meilleure solution est de télécharger l'un de la coutume commutateur implémentations mentionné dans l'autre question que vous avez évoqués. Soit UICustomSwitch ou RCSwitch. Ils devraient être en mesure de réaliser des étiquettes.
Il n'existe aucune option de redimensionnement des uiswitch dans xib, donc besoin de créer et de le redimensionner en classe de contrôleur,
Si vous souhaitez redimensionner l'interrupteur à travers la table de montage ou de plume, Vous pouvez sous-classe UISwitch et remplacer awakeFromNib méthode:
Sélectionnez le commutateur de contrôler et de changer de classe à votre custom commutateur de classe.
Voici une solution dans le code:
Où varSettingsSwitchNewsletter_scale est un entier de 0 à 100 (%).