i_a*_*orf 33 interface-builder uikit ios retina-display
注意,我想制作1px线,而不是1pt线.意思是它应该是1px而不管屏幕比例(因此在Retina设备上为0.5pt).
我可以通过编程方式执行此操作,但是我可以在Interface Builder中执行此操作吗?例如,我不能将UIView设置为小于1的高度.
如果我可以在IB中执行此操作,那么我不必声明插座并手动设置框架awakeFromNib
.
Dan*_*sko 50
以防其他人来这里想知道如何以编程方式完成,以下是你如何做到的:
在IB中将高度约束设置为所需视图,并将常量设置为1.
然后,您需要从约束中按CTRL +拖动到自定义视图或ViewController中.
每当XIB被加载,无论是在awakeFromNib
或viewDidLoad
,你要设置约束到显示器的规模的不断:
onePixelViewHeightConstraint.constant = 1/UIScreen.main.scale//enforces it to be a true 1 pixel line
Run Code Online (Sandbox Code Playgroud)
self.onePixelViewHeightConstraint.constant = 1.f/[UIScreen mainScreen].scale;//enforces it to be a true 1 pixel line
Run Code Online (Sandbox Code Playgroud)
请享用
Mar*_*tis 36
我创建了NSLayoutConstraint
子类:
class HairlineConstraint: NSLayoutConstraint {
override func awakeFromNib() {
super.awakeFromNib()
self.constant = 1.0 / UIScreen.main.scale
}
}
Run Code Online (Sandbox Code Playgroud)
然后只需在界面构建器中创建视图,添加高度约束
并将其类设置为HairlineConstraint
.
完成.
mvd*_*vds 27
通过创建这个微小的子类,NSLayoutConstraint
我现在可以在IB中添加1px行:
@implementation NSLayoutConstraintHairline
-(void)awakeFromNib
{
[super awakeFromNib];
if ( self.constant == 1 ) self.constant = 1/[UIScreen mainScreen].scale;
}
@end
Run Code Online (Sandbox Code Playgroud)
任何值为1的约束都可以设置为class,NSLayoutConstraintHairline
以使常量有效地为1px而不是1pt.
如果您决定将常量更改为另一个值,它将像任何其他约束一样工作.
Nev*_*s12 26
随着6的Xcode和引进@IBInspectable
和@IBDesignable
关键字,它肯定是可能的,相当简单.无需子类/插入任何东西.
您可以使用以下代码(swift)为NSLayoutConstraint执行扩展(类别):
extension NSLayoutConstraint {
@IBInspectable var preciseConstant: Int {
get {
return Int(constant * UIScreen.mainScreen().scale)
}
set {
constant = CGFloat(newValue) / UIScreen.mainScreen().scale
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在IB中选择所需的约束.
转到它的属性并设置值.
在上面的例子中,它将在1x,2x和3x设备上渲染1 px高度的视图.
Rud*_*vič 13
在Swift中:
@IBOutlet var hairlineConstraint: NSLayoutConstraint! {
didSet {
hairlineConstraint.constant = 1 / UIScreen.mainScreen().scale
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:这个答案是针对@ 2x唯一的设备.当时@ 3x尚未上市!
如今,@mdvs
答案似乎是最干净的.
即使对于仅视网膜设备,在IB中制作1px线也很困难.最后我用它实现了它User Defined Runtime Attributes
.
这是一个截图,用于将高度约束设置为0.5像素(在视网膜设备上为1像素).
基于@Nevs12 的回答和评论,我认为使用这样的东西更有意义:
extension NSLayoutConstraint {
@IBInspectable var usePixels: Bool {
get {
return false // default Value
}
set {
if newValue {
constant = constant / UIScreen.mainScreen().scale
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17906 次 |
最近记录: |