web-dev-qa-db-ja.com

UIProgressViewの高さを増やす方法

UIProgressViewからnibを作成しています。高さを増やしたいのですが、9に固定されています。iPadの場合、高さを増やす必要があります。どうすればできますか?

前もって感謝します。

57

Nibを使用してUIProgressViewの高さを変更することはできません。高さを変更する場合は、カスタム描画メソッドを使用して実装する必要があります。

5
raaz

CGAffineTransformを使用して寸法を変更します。

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

レイアウト制約を使用するとうまくいきました:

enter image description here

83
Logan

このソースを配置

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

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

Interface Builder内で高さを変更する簡単な方法があります。コードは不要で、変更はIBに表示されます。

ストーリーボードまたはxibでUIProgressViewオブジェクトを選択し、エディター>ピン>高さを選択します。これにより、高さの制約が作成され、左端の(使用)パネルの属性インスペクターで値を変更できます。

11
Matt

スウィフト3:

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

次のコードは最新のSwift xCodeで動作します:

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

Swift

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

ここに解決策があります

変換を使用できますが、デバイスの向きを変更すると、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.

ありがとうございました

6
Mayur Kothawade

AutoLayoutを使用して同じ外観を実現し、iOS 7.1でも機能します。進行状況バーの高さと同じ高さの制約を追加するだけです。詳細については、この同様の質問に関するこの回答をご覧ください。

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

6
Steve Moser

IOS 7以降の場合、Core GraphicsおよびCATransform3DScaleを使用して、そのビューのレイヤーをスケーリングします。

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

これを行うことを確認してくださいafterbeforeではなく、progressViewのフレームを設定します。

5
Mike Onorato

IOS 7以降では、次のことを行いました。(a)動作し、(b)警告を生成しません。

最初にUIProgressViewをストーリーボードのView Controllerに追加します。次に、Ctrlキーを押しながらUIProgressViewをドラッグして、UIProgressViewにHeight制約を追加します。制約は、2のデフォルト値で作成されます。放っておけ。

高さを変更するには、次のようなコードでIBOutletUIViewControllerサブクラスに追加します。

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

次に、コードに、おそらく- viewDidLoadを追加します。

self.progressHeight.constant = 9;

これはあなたのためにうまくいくはずです。

4
i_am_jorf

高さを設定できるサードパーティのプログレスバーがあります。 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

2
ftvs

カテゴリ(新しいファイル-カテゴリ)を実装し、クラスの最初にカテゴリを追加するだけです。 iboutlet(nib/storyboard)でも正常に動作します。

コードはただ

@interface UIProgressView (heavyView)
@end

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

1つのprogressViewのみに変更を適用し、クラスに複数のprogressViewがある場合、代わりにサブクラスを使用できます。

2
Daniel C.

私の提案は、自動レイアウトでView Controllerのビューにコンテナビューを配置することです。進行状況バーに必要なサイズであることを確認してください。ここで、コンテナ内に進行状況ビューをドラッグし、すべての側面をコンテナの境界に固定します。コンテナの境界に合うように、進行状況ビューのサイズ変更がすぐに表示されます。

Resized UIProgressView

0
Stephen Paul

Mayurのメソッドは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
Jason

インターフェイスビルダーを使用する代わりに、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)]];
0
user3480295

サブクラスを作成し、固有のサイズを調整します。

class FatProgressView: UIProgressView {

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

}
0