Как увеличить высоту UIProgressView - PullRequest
56 голосов
/ 09 августа 2010

Я создаю UIProgressView из nib.Я хочу увеличить ее высоту, но она установлена ​​на 9. Для iPad мне нужно увеличить ее высоту.Как это можно сделать?

Заранее спасибо.

Ответы [ 20 ]

167 голосов
/ 22 декабря 2010

Используйте CGAffineTransform для изменения размеров:

CGAffineTransform transform = CGAffineTransformMakeScale(1.0f, 3.0f);  
progressView.transform = transform;
81 голосов
/ 25 сентября 2014

Использование ограничений макета сработало для меня:

enter image description here

26 голосов
/ 10 января 2014

разместите этот источник

@implementation UIProgressView (customView)
- (CGSize)sizeThatFits:(CGSize)size {
    CGSize newSize = CGSizeMake(self.frame.size.width, 9);
    return newSize;
}
@end
12 голосов
/ 01 июня 2012

Просто установите фрейм UIProgressView в коде после его инициализации. Например:

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.

Это работает для меня на iOS 5. Хотя я использую собственные trackImage и progressImage. Мой код выглядит так. Обратите внимание, что я добавляю progressView в другое представление и хочу, чтобы он был того же размера, что и содержащее представление, поэтому для фрейма установлено значение 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];
11 голосов
/ 07 января 2014

Существует простой способ изменить высоту в Интерфейсном Разработчике.Код не требуется, и ваше изменение будет отображаться в IB.

Выберите объект UIProgressView в раскадровке или XIB, выберите «Редактор»> «Pin»> «Высота».Это создаст ограничение по высоте и позволит вам изменить его значение в Инспекторе атрибутов на самой левой панели (Utilizes).

10 голосов
/ 14 января 2017

Swift 3:

progressView.transform = progressView.transform.scaledBy(x: 1, y: 9)
10 голосов
/ 25 мая 2015

Следующий код работает на новейшем Swift xCode:

var transform : CGAffineTransform = CGAffineTransformMakeScale(1.0, 6.0)
           progressView.transform = transform
7 голосов
/ 26 мая 2017

Swift3

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

Добавление

Если вы работаете с классом IBDesignable, вы можете настроить его с помощью раскадровки:

@IBInspectable var progressBarHeight: CGFloat = 2.0 {
    didSet {
        let transform = CGAffineTransform(scaleX: 1.0, y: progressBarHeight)
        self.progressView.transform = transform
    }
}
6 голосов
/ 28 марта 2014

Вы также можете использовать AutoLayout для достижения того же внешнего вида, и он работает в iOS 7.1.Просто добавьте ограничение высоты, равное высоте, которой вы хотите, чтобы ваш индикатор выполнения был.Проверьте этот ответ на этот похожий вопрос для более подробной информации.

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

6 голосов
/ 06 марта 2013

Вот решение

Вы можете использовать преобразование, но возникает проблема, что -> при изменении ориентации устройства высота UIProgressView становится исходной.

Так что лучший способ увеличить UIProgressViewрост

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.

Спасибо

...