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

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

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

Ответы [ 20 ]

5 голосов
/ 09 декабря 2014

Для iOS 7+ используйте Core Graphics и CATransform3DScale , чтобы масштабировать слой в этом виде:

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

Просто убедитесь, что вы делаете это после , когда вы устанавливаете рамку progressView, а не до.

5 голосов
/ 09 августа 2010

Вы не можете изменить высоту UIProgressView через кончик. Если вы хотите изменить высоту, вы должны реализовать ее с помощью пользовательского метода рисования.

4 голосов
/ 15 октября 2014

Для iOS 7 и выше, я сделал следующее, что (a) работает и (b) не генерирует предупреждение:

Сначала добавьте UIProgressView к моему View Controller в раскадровке.Затем добавьте ограничение высоты к UIProgressView с помощью CTRL + перетаскивание UIProgressView к себе.Ограничение будет создано со значением по умолчанию 2.Оставьте это в покое.

Теперь, чтобы изменить высоту, добавьте IBOutlet к подклассу UIViewController в коде, подобном следующему:

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

Затем в вашем коде, вероятно, - viewDidLoad,добавьте:

self.progressHeight.constant = 9;

Это должно сработать для вас.

2 голосов
/ 31 декабря 2015

Вы можете реализовать категорию (новый файл - категория) и просто добавить категорию в начале вашего класса.Он также хорошо работает с iboutlet (nib / storyboard).

Код просто

@interface UIProgressView (heavyView)
@end

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

, если вы хотите применить изменение только для одного progressView, и у вас есть более одного progressView вваш класс, вы можете просто использовать вместо этого подкласс.

2 голосов
/ 01 июля 2015

Вот сторонний индикатор выполнения, который позволяет устанавливать высоту. https://github.com/yannickl/YLProgressBar

enter image description here

Установить фрейм с помощью кода или построителя интерфейса. Возможно, вы захотите отключить анимацию или полосы.

Вот код для толстого зеленого индикатора выполнения:

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

enter image description here

0 голосов
/ 03 июля 2019

Просто создайте подкласс и настройте собственный размер:

class FatProgressView: UIProgressView {

    override var intrinsicContentSize: CGSize {
        return CGSize(width: UIView.noIntrinsicMetric, height: 20.0)
    }

}
0 голосов
/ 25 июля 2017

Simple.Swift 4.

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

0 голосов
/ 22 января 2014

Метод Майюра хорошо работал в iOS 7, вот мой код (использует 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));
    }]];
0 голосов
/ 16 марта 2016

Мое предложение будет заключаться в том, чтобы поместить представление контейнера на представление вашего контроллера представления в Auto Layout.Убедитесь, что это размер, который вы хотите для вашего индикатора выполнения.Теперь перетащите вид прогресса внутри контейнера и прикрепите все стороны к границам контейнера.Вы должны сразу же увидеть размер хода выполнения, чтобы он соответствовал границам его контейнера.

Resized UIProgressView

0 голосов
/ 03 июля 2015

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

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)]];
...