IB_DESIGNABLE viewing previews in preview?

I have my views displayed in the interface builder with my property settings IB_DESIGNABLE, however, when I use the preview function to see how my views look on different devices, I just get a super view, for example. UIView.

Are IB_DESIGNABLEviews displayed in the preview?

EDIT As requested code + screenshot:

H
=
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface TitleBannerView : UILabel
@property (nonatomic) IBInspectable CGFloat borderWidth;
@property (nonatomic) IBInspectable CGFloat cornerRadius;
@property (nonatomic) IBInspectable CGFloat shadowHeight;
@end

M
=
@implementation TitleBannerView
@synthesize borderWidth;
@synthesize cornerRadius;
@synthesize shadowHeight;

- (void)drawRect:(CGRect)rect {

    if (self.borderWidth == 0) self.borderWidth = 8.5;
    if (self.cornerRadius == 0) self.cornerRadius = 33;
    if (self.shadowHeight == 0) self.shadowHeight = 15.1;

    CGContextRef context = UIGraphicsGetCurrentContext();

    //// Color Declarations
    UIColor* bG = [UIColor colorWithRed: 0.18 green: 0.8 blue: 0.443 
       alpha: 1];
    UIColor* borderColor = [UIColor colorWithRed: 0.557 green: 0.267 blue: 0.678 
       alpha: 1];
    UIColor* shadowColor2 = [UIColor colorWithRed: 0.976 green: 0.859 blue: 0.718 
       alpha: 1];

    //// Shadow Declarations
    UIColor* shadow = shadowColor2;
    CGSize shadowOffset = CGSizeMake(-4.1, self.shadowHeight);
    CGFloat shadowBlurRadius = 1.5;

//

    //// Frames
    CGRect frame = self.bounds;

    //// Subframes
    CGRect group = CGRectMake(CGRectGetMinX(frame) + 15, 
        CGRectGetMinY(frame) + 15, CGRectGetWidth(frame) - 28, 
        CGRectGetHeight(frame) - 40);


    //// Abstracted Attributes
    CGFloat roundedRectangleStrokeWidth = self.borderWidth ;
    CGFloat roundedRectangleCornerRadius = self.cornerRadius;

    //// Group
    {
        //// Rounded Rectangle Drawing
        UIBezierPath* roundedRectanglePath = [UIBezierPath bezierPathWithRoundedRect: 
           CGRectMake(CGRectGetMinX(group) + floor(CGRectGetWidth(group) * 0.00060) + 0.5, 
           CGRectGetMinY(group) + floor(CGRectGetHeight(group) * 0.00568) + 0.5, 
          floor(CGRectGetWidth(group) * 0.99940) - floor(CGRectGetWidth(group) * 0.00060), 
         floor(CGRectGetHeight(group) * 0.99432) - floor(CGRectGetHeight(group) * 0.00568)) 
         cornerRadius: roundedRectangleCornerRadius];
        CGContextSaveGState(context);
        CGContextSetShadowWithColor(context, shadowOffset, shadowBlurRadius, 
            shadow.CGColor);
        [bG setFill];
        [roundedRectanglePath fill];
        CGContextRestoreGState(context);

        [borderColor setStroke];
        roundedRectanglePath.lineWidth = roundedRectangleStrokeWidth;
        [roundedRectanglePath stroke];

    }
}
@end

TitleBannerView is a green color with a purple border. enter image description here

+4
source share
3 answers

Firstly, IBDesignable can be seen in the preview.

IBDesignable ? IBInspectable , .

, ( ):

  • , 100 .

  • prepareForInterfaceBuilder() .

+3

?

@ IBDesignable ,

Interface Builder, , .

  • prepareForInterfaceBuilder(): , , Interface Builder.
  • TARGET_INTERFACE_BUILDER: #if TARGET_INTERFACE_BUILDER Objective-C, Swift,

,

0

IBDesignable only works in the Builder interface, but not in the preview :-( I hope that Apple will fix it in the new Xcode ...

0
source

Source: https://habr.com/ru/post/1614155/


All Articles