İmageEdgeİnsets ile UİButton metin ve görüntü hizalama ve titleEdgeİnsets
Bir simge, metin, görüntü ve metin başlangıcı arasında boşluk yaklaşık 2-3 piksel var böyle iki satırlık sol yerleştirmek istiyorum. Yatay (Interface Builder ile set) uyumlu kendisidir Merkezi kontrol
Düğme bunun gibi bir şeye benzer:
| |
|[Image] Add To |
| Favorites |
ContentEdgeİnset, imageEdgeİnsets ve boşuna titleEdgeİnsets ile bu yapılandırmak için çalışıyorum. Negatif bir değer pozitif bir değer bunu merkezine daha yakın taşımak için küçülür ise kenarı genişletir anlıyorum.
Denedim:
[button setTitleEdgeInsets:UIEdgeInsetsMake(0, -image.size.width, 0, 0)];
[button setImageEdgeInsets:UIEdgeInsetsMake(0, button.titleLabel.bounds.size.width, 0, 0)];
ama bu doğru görüntülemiyor. Değerleri verdiği ama değer beklenen şekilde hareket görünmüyor sol İç metin üzerinde -10 -5 diyelim geçiriyorum. -10 metin -5 sol taraftan yarım kaçmak için bekliyordum ama yok o kadar sola kay.
Parçalar arkasındaki mantık nedir? Görüntü yerleşimleri ve terminoloji aşina değilim.
Referans olarak bu KADAR soru kullandım ama benim değerler hakkında bir şey doğru değil. UIButton: how to center an image and a text using imageEdgeInsets and titleEdgeInsets?
CEVAP
Bu partiye biraz geç kaldım, ama bir şey eklemek için yararlı olduğunu düşünüyorum.
Kekoa cevabı büyük ama, RonLugge bahseder, bunu yapabilirsiniz düğmesi artık saygı sizeToFit
ya da, daha önemlisi, neden düğmeye klip içeriği zaman özünde bulunur. Eyvah!
Gerçi, ilk
imageEdgeInsets
titleEdgeInsets
çalışır inanıyorum nasıl kısa bir açıklama:
docs for imageEdgeInsets
söylemek şu bölüm var:
Bu özellik ve düğme resmi için etkili çizim dikdörtgeni yeniden boyutlandırmak yeniden konumlandırmak için kullanın. Dört parçalar (üst, sol, alt, sağ her biri için farklı bir değer belirtebilirsiniz. Pozitif bir değer kenar—hareket düğmesi merkezine daha yakın olan, ya parçalar, küçültür. Negatif bir değer genişletir, ya da, kenar outsets.
Bu belge düğmesini Başlığı hayal, sadece bir görüntü yazılı olduğuna inanıyorum. Çok daha mantıklı bu şekilde düşünmemiştim yapar, ve UIEdgeInsets
genellikle nasıl davranır. Temel olarak, resmin çerçevesi (veya unvanı, titleEdgeInsets
) içe olumlu parçalar için taşınır ve negatif parçalar için dışa doğru.
TAMAM, ne olmuş yani?
Ben de oraya geliyorum! Varsayılan olarak ne var işte, bir resim ve bir başlık (düğme sınırının nerede olduğunu göstermek için yeşil yanar) ayarı:
Bir resim ve bir başlık arasındaki boşluk istediğinizde, ya da ezilmeye neden olmadan, dört farklı parçalar, görüntü ve başlık her iki ayarlamanız gerekir. Bunu değiştirmek istemiyorum çünküboyutlarıbu elemanların Kare, ama sadece kendi pozisyonları. Bu şekilde düşünmeye başlayınca, Kekoa mükemmel bir kategori için gerekli değişime açık hale gelir:
@implementation UIButton(ImageTitleCentering)
- (void)centerButtonAndImageWithSpacing:(CGFloat)spacing {
CGFloat insetAmount = spacing / 2.0;
self.imageEdgeInsets = UIEdgeInsetsMake(0, -insetAmount, 0, insetAmount);
self.titleEdgeInsets = UIEdgeInsetsMake(0, insetAmount, 0, -insetAmount);
}
@end
Ama beklediyorsun., ^em>bunu yaptığımda bu çıkıyor:
Oh evet! , the docs beni bu konuda uyarmıştı unuttum. Derler ki, bir bölümü
Bu mülkiyet düzeni sırasında görüntü konumlandırma için kullanılır. Düğmesi
intrinsicContentSize
sizeThatFits:
belirlemek için bu özelliği kullanın.
Ama yokbir özelliği yardımcı olabilir, ve o contentEdgeInsets
. The docs Bu çok açık, bir bölümü
Düğmesi
intrinsicContentSize
sizeThatFits:
belirlemek için bu özelliği kullanır.
Kulağa hoş geliyor. İzin çimdik bir kez daha kategori:
@implementation UIButton(ImageTitleCentering)
- (void)centerButtonAndImageWithSpacing:(CGFloat)spacing {
CGFloat insetAmount = spacing / 2.0;
self.imageEdgeInsets = UIEdgeInsetsMake(0, -insetAmount, 0, insetAmount);
self.titleEdgeInsets = UIEdgeInsetsMake(0, insetAmount, 0, -insetAmount);
self.contentEdgeInsets = UIEdgeInsetsMake(0, insetAmount, 0, insetAmount);
}
@end
Ve ne elde ediyorsun?
Benim için bir kazanan gibi görünüyor.
UİButton: bir resim ve bir metin image...
Nasıl UİButton'in metin hizalama ...
iPhone SDK: hem görüntü ve metin ile m...
UİButton Görüntü Metin İOS...
UİButton başlık metin rengi...