Ich tat das gleiche mit einer UIView
Kategorie. Hier sind meine Methoden:
#define SEPARATOR_HEIGHT 0.5
- (void)addSeparatorLinesWithColor:(UIColor *)color
{
[self addSeparatorLinesWithColor:color edgeInset:UIEdgeInsetsZero];
}
- (void)addSeparatorLinesWithColor:(UIColor *)color edgeInset:(UIEdgeInsets)edgeInset
{
UIView *topSeparatorView = [[UIView alloc] initWithFrame:CGRectMake(edgeInset.left, - SEPARATOR_HEIGHT, self.frame.size.width - edgeInset.left - edgeInset.right, SEPARATOR_HEIGHT)];
[topSeparatorView setBackgroundColor:color];
[self addSubview:topSeparatorView];
UIView *separatorView = [[UIView alloc] initWithFrame:CGRectMake(edgeInset.left, self.frame.size.height + SEPARATOR_HEIGHT, self.frame.size.width - edgeInset.left - edgeInset.right, SEPARATOR_HEIGHT)];
[separatorView setBackgroundColor:color];
[self addSubview:separatorView];
}
Gerade Rémy große Antwort hinzuzufügen, ist es vielleicht sogar einfacher, dies zu tun. Eine Klasse UILine.m
@interface UILine:UIView
@end
@implementation UILine
-(id)awakeFromNib
{
// careful, contentScaleFactor does NOT WORK in storyboard during initWithCoder.
// example, float sortaPixel = 1.0/self.contentScaleFactor ... does not work.
// instead, use mainScreen scale which works perfectly:
float sortaPixel = 1.0/[UIScreen mainScreen].scale;
UIView *topSeparatorView = [[UIView alloc] initWithFrame:
CGRectMake(0, 0, self.frame.size.width, sortaPixel)];
topSeparatorView.userInteractionEnabled = NO;
[topSeparatorView setBackgroundColor:self.backgroundColor];
[self addSubview:topSeparatorView];
self.backgroundColor = [UIColor clearColor];
self.userInteractionEnabled = NO;
}
@end
In IB, fallen in einem UIView, klicken Sie auf Identität Inspektor und benennen Sie die Klasse zu einem UILine. Stellen Sie die Breite in IB ein. Stellen Sie die Höhe auf 1 oder 2 Pixel ein - einfach so, dass Sie es in IB sehen können. Setzen Sie die Hintergrundfarbe, die Sie in IB wollen. Wenn Sie die App ausführen, wird sie zu einer 1-Pixel-Linie, die Breite, in dieser Farbe. (Sie sollten wahrscheinlich nicht von den standardmäßigen Autoresize-Einstellungen in Storyboard/Xib betroffen sein, ich konnte es nicht zum Abbruch bringen.) Sie sind fertig.
Hinweis: Sie können denken, "Warum nicht einfach Größe der UIView in Code in watchFromNib?" Die Größe der Ansichten beim Laden in einer Storyboard-App ist problematisch - siehe die vielen Fragen dazu!
Interessante Gotchya: Es ist wahrscheinlich, dass Sie nur die UIView, sagen wir, 10 oder 20 Pixel hoch auf dem Storyboard machen, einfach, damit Sie es sehen können. Natürlich verschwindet es in der App und Sie erhalten die hübsche Pixelzeile. Aber! Denken Sie daran, sich daran zu erinnern, self.userInteractionEnabled = NO
, oder es könnte über Ihre anderen, sagen wir, Knöpfe!
2016 Lösung! https://stackoverflow.com/a/34766567/294884
Haben Sie versucht, die Alpha in einem 1px UIView zu ändern? es wird aussehen, als wäre es dünner. – streem
Ich bin auf der Suche nach einem generischen Weg, und trotzdem brauche ich eine einfarbige Farbe:/ – Lirik
Obwohl dies eine großartige QA war - ** hier ist eine viel modernere Lösung ** http://StackOverflow.com/a/ 34766567/294884 – Fattie