iphone cocoa-touch ipad uiprogressview

iphone - Cómo aumentar la altura de UIProgressView



cocoa-touch ipad (19)

Estoy creando UIProgressView desde nib . Quiero aumentar su altura, pero está fijado en 9. Para iPad , necesito aumentar su altura. ¿Cómo se puede hacer?

Gracias por adelantado.


Aquí está la solución

Puede usar la transformación, pero surge el problema de que -> cuando cambia la orientación del dispositivo, la altura UIProgressView se convierte en la original.

Entonces, la mejor manera de aumentar la altura de UIProgressView es

yourProgressView.progressImage=[UIImage imageNamed:@"image1.png"]; yourProgressView.trackImage = [UIImage imageNamed:@"image2.png"]; // IMPORTANT: image1/image2 height (in pixel) = height that you want for yourProgressView. // no need to set other properties of yourProgressView.

Gracias


Aquí hay una barra de progreso de terceros que permite configurar la altura. https://github.com/yannickl/YLProgressBar

Establecer marco a través de código o constructor de interfaz. Sin embargo, es posible que desee deshabilitar la animación o las franjas.

Aquí hay un código para una barra de progreso verde gruesa:

YLProgressBar *bar = [[YLProgressBar alloc] initWithFrame:CGRectMake(0, 100, 100, 50)]; bar.progress = 0.5; bar.type = YLProgressBarTypeFlat; bar.hideStripes = YES; bar.behavior = YLProgressBarBehaviorDefault; bar.progressTintColors = @[[UIColor greenColor], [UIColor greenColor]];


El método de Mayur funcionó bien para mí en iOS 7, aquí está mi código (usa UIImage + BBlock)

CGFloat progressViewHeight = 5; [[UIProgressView appearance] setProgressImage:[UIImage imageForSize:CGSizeMake(1, progressViewHeight) withDrawingBlock:^{ CGContextRef context = UIGraphicsGetCurrentContext(); UIColor * colortoUse = [UIColor blueColor]; CGContextSetFillColorWithColor(context, [colortoUse CGColor]); CGContextFillRect(context, CGRectMake(0, 0, 1, progressViewHeight)); }]]; [[UIProgressView appearance] setTrackImage:[UIImage imageForSize:CGSizeMake(1, progressViewHeight) withDrawingBlock:^{ CGContextRef context = UIGraphicsGetCurrentContext(); UIColor * colortoUse = [UIColor progressViewBackgroundColor]; CGContextSetFillColorWithColor(context, [colortoUse CGColor]); CGContextFillRect(context, CGRectMake(0, 0, 1, progressViewHeight)); }]];


El siguiente código funciona en el último xCode rápido:

var transform : CGAffineTransform = CGAffineTransformMakeScale(1.0, 6.0) progressView.transform = transform


En lugar de utilizar el constructor de interfaz, la altura de UIProgressView se puede cambiar agregando restricciones programáticamente.

UIProgressView *progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; progressView.translatesAutoresizingMaskIntoConstraints = NO; CGRect frame = CGRectMake(100, 200, 200, 50); [self.view addSubview:progressView]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-y-[progressView(height)]" options:0 metrics:@{@"y": @(CGRectGetWidth(frame)), @"height": @(CGRectGetHeight(frame))} views:NSDictionaryOfVariableBindings(progressView)]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-x-[progressView(width)]" options:0 metrics:@{@"x": @(CGRectGetMinX(frame)), @"width": @(CGRectGetWidth(frame))} views:NSDictionaryOfVariableBindings(progressView)]];


Hay una manera simple de cambiar la altura dentro de Interface Builder. No se requiere código y su cambio se mostrará en IB.

Seleccione el objeto UIProgressView en su guión gráfico o xib, elija Editor> Pin> Altura. Esto creará una restricción de altura y le permitirá cambiar su valor en el Inspector de Atributos en su panel de la izquierda (Utilizaciones).


Mi sugerencia sería colocar una vista de contenedor en la vista del controlador de vista en Diseño automático. Asegúrate de que sea del tamaño que deseas para tu barra de progreso. Ahora arrastre una vista de progreso dentro del contenedor y ancle todos los lados a los límites del contenedor. Debería ver inmediatamente el cambio de tamaño de la vista de progreso para ajustarse a los límites de su contenedor.


No puede cambiar la altura de UIProgressView a través de plumín. Si desea cambiar la altura, debe implementarla a través del método de dibujo personalizado.


Para iOS 7 o superior , use Core Graphics y CATransform3DScale para escalar la capa en esa vista:

CATransform3D transform = CATransform3DScale(progressView.layer.transform, 1.0f, 3.0f, 1.0f); progressView.layer.transform = transform;

Solo asegúrate de hacer esto después de establecer el marco de progressView, no antes.


Para iOS 7 y superior, hice lo siguiente que (a) funciona y (b) no genera una advertencia:

Primero agregue UIProgressView a mi controlador de vista en el guión gráfico. A continuación, agregue una restricción de altura al UIProgressView con CTRL + arrastrando el UIProgressView hacia sí mismo. La restricción se creará con un valor predeterminado de 2 . Deja eso solo.

Ahora, para cambiar la altura, agregue un IBOutlet a la subclase UIViewController en un código como este:

@property (nonatomic, weak) IBOutlet NSLayoutConstraint *progressHeight;

Luego, en su código, probablemente - viewDidLoad , agregue:

self.progressHeight.constant = 9;

Esto debería funcionar bien para ti.


Puede implementar una categoría (nuevo archivo - categoría) y solo agregar la categoría al comienzo de su clase. Funciona bien también con iboutlet (punta / guión gráfico).

El código es solo

@interface UIProgressView (heavyView) @end @implementation UIProgressView (heavyView) - (CGSize)sizeThatFits:(CGSize)size { CGSize newSize = CGSizeMake(size.width, 9); return newSize; } @end

si desea aplicar el cambio para solo un progressView y tiene más de un progressView en su clase, puede usar una subclase.


Simplemente configure el marco de UIProgressView en el código después de que se haya inicializado. P.ej:

UIProgressView *progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; // progressView''s frame will be small/standard height progressView.frame = CGRectMake(0, 0, 100, 20); // Now the frame is set to my custom rect.

Esto funciona para mí en iOS 5. Aunque estoy usando TrackImage personalizado y progressImage. Mi código se ve así. Tenga en cuenta que estoy agregando el progressView a otra vista y quiero que sea del mismo tamaño que la vista que contiene, por lo tanto, establezco el marco en self.bounds.

_progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; _progressView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; _progressView.trackImage = [[UIImage imageNamed:@"search-progress-track"] resizableImageWithCapInsets:UIEdgeInsetsMake(3.0f, 3.0f, 3.0f, 3.0f)]; _progressView.progressImage = [[UIImage imageNamed:@"search-progress"] resizableImageWithCapInsets:UIEdgeInsetsMake(3.0f, 3.0f, 3.0f, 3.0f)]; _progressView.frame = self.bounds; [_progressView setProgress:0.5];


Swift 3:

progressView.transform = progressView.transform.scaledBy(x: 1, y: 9)


También puede usar AutoLayout para lograr el mismo aspecto y funciona en iOS 7.1. Simplemente agregue una restricción de altura igual a la altura que desea que tenga su barra de progreso. Vea esta respuesta en esta pregunta similar para más detalles.

https://.com/a/19606981/142358


Usar restricciones de diseño funcionó para mí:


Use CGAffineTransform para cambiar las dimensiones:

CGAffineTransform transform = CGAffineTransformMakeScale(1.0f, 3.0f); progressView.transform = transform;


coloque esta fuente

@implementation UIProgressView (customView) - (CGSize)sizeThatFits:(CGSize)size { CGSize newSize = CGSizeMake(self.frame.size.width, 9); return newSize; } @end


Sencillo. Swift 4.

progressBar.transform = CGAffineTransform (scaleX: self.view.frame.width / progressBar.frame.width, y: self.view.frame.height / progressBar.frame.height)


Swift3

var transform : CGAffineTransform = CGAffineTransform(scaleX: 1.0, y: 6.0) progressBar.transform = transform

Apéndice

Si trabajas con una clase IBDesignable , puedes modificarla con tu guión gráfico:

@IBInspectable var progressBarHeight: CGFloat = 2.0 { didSet { let transform = CGAffineTransform(scaleX: 1.0, y: progressBarHeight) self.progressView.transform = transform } }