私はiOS(6)アプリで作業しており、サイズを変更(アニメーション化)したビューがあり、そのビュー内にUILabelがあります。これは、ビューとともに拡大したいのですが、比例的には拡大しません。
つまり、ビューが特定のサイズの場合、たとえばビューの90%を占める必要がありますが、(別の特定のサイズに)大きくすると、80%などのビューのみを占めるようにします。これは、スーパービューが大きくなると表示されるUILabel周辺の他のサブビューに対応するためです。
これでNSLayoutContraintsを使用して、先頭のスペースを必要なサイズに設定し、UILabelの幅を設定して適切に拡大してみました。また、先頭と末尾のスペースを設定してみました(その後、幅は自動的に拡大します)。
奇妙なことに、同じアニメーションコードブロック(UIView animateWithDuration:...を使用)にNSLayoutContraintsを使用している他のサブビューがあり、それらはすべて機能します。ただし、これらはすべて間隔の制約であり、サイズの制約ではなく、UILabelが関係するものはないため、これがそれと関係があるかどうかはわかりません...
次に、UILabelのtranslatesAutoresizingMaskIntoConstraints = YESを設定し、ラベルにsetFrame:を使用してみました。これにより、ラベルのサイズと位置が正確に設定されますが、変更はアニメーション化されないため、ひどいように見えます...
他の誰かがこのようなことや私を助けるためのアイデアを経験したことがありますか?
ありがとう
以下は、私が試したコードです。ここで、「left」はラベルの先頭のスペース制約であり、「width」はラベルの幅制約です。
setFrameメソッドは、親ViewControllerからアニメーションコードブロック内で呼び出されます。
- (void)setFrame:(CGRect)frame {
[super setFrame:frame];
float gap = ((frame.size.height - 36) - 9 * [self.account.accountData numberOfBars]) / ([self.account.accountData numberOfBars] + 1);
for (NSLayoutConstraint *constraint in constraints) {
constraint.constant = gap;
}
self.left.constant = frame.size.width * 34/160 + (2 - 34 * 140 / 160);
self.width.constant = frame.size.width * 0.575 + 55.5;
[self layoutIfNeeded];
}