Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
weihan-plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Wei Han
weihan-plugin
Commits
db23c5fb
Commit
db23c5fb
authored
Oct 10, 2025
by
Wei Han
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
native UI update
parent
579f896f
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
215 additions
and
53 deletions
+215
-53
Info.plist
...PluginFramework/QmsPluginFramework.xcframework/Info.plist
+5
-5
QmsPluginFramework
...ios-arm64/QmsPluginFramework.framework/QmsPluginFramework
+0
-0
QmsPluginFramework
...simulator/QmsPluginFramework.framework/QmsPluginFramework
+0
-0
DetailsViewController.mm
...work/QmsPluginFramework/AddIssue/DetailsViewController.mm
+131
-23
PlanViewController.mm
...amework/QmsPluginFramework/AddIssue/PlanViewController.mm
+74
-20
DashboardViewController.mm
...k/QmsPluginFramework/Dashboard/DashboardViewController.mm
+0
-0
Info.plist
ios/QmsPluginFramework.xcframework/Info.plist
+5
-5
QmsPluginFramework
...ios-arm64/QmsPluginFramework.framework/QmsPluginFramework
+0
-0
QmsPluginFramework
...simulator/QmsPluginFramework.framework/QmsPluginFramework
+0
-0
No files found.
framework/QmsPluginFramework/QmsPluginFramework.xcframework/Info.plist
View file @
db23c5fb
...
@@ -8,32 +8,32 @@
...
@@ -8,32 +8,32 @@
<
k
e
y
>
BinaryPath
<
/k
e
y
>
<
k
e
y
>
BinaryPath
<
/k
e
y
>
<
string
>
QmsPluginFramework.framework/QmsPluginFramework
<
/string
>
<
string
>
QmsPluginFramework.framework/QmsPluginFramework
<
/string
>
<
k
e
y
>
LibraryIdentifier
<
/k
e
y
>
<
k
e
y
>
LibraryIdentifier
<
/k
e
y
>
<
string
>
ios-arm64
<
/string
>
<
string
>
ios-arm64
_x86_64-simulator
<
/string
>
<
k
e
y
>
LibraryPath
<
/k
e
y
>
<
k
e
y
>
LibraryPath
<
/k
e
y
>
<
string
>
QmsPluginFramework.framework
<
/string
>
<
string
>
QmsPluginFramework.framework
<
/string
>
<
k
e
y
>
SupportedArchitectures
<
/k
e
y
>
<
k
e
y
>
SupportedArchitectures
<
/k
e
y
>
<
a
rr
a
y
>
<
a
rr
a
y
>
<
string
>
arm64
<
/string
>
<
string
>
arm64
<
/string
>
<
string
>
x86_64
<
/string
>
<
/
a
rr
a
y
>
<
/
a
rr
a
y
>
<
k
e
y
>
SupportedPlatform
<
/k
e
y
>
<
k
e
y
>
SupportedPlatform
<
/k
e
y
>
<
string
>
ios
<
/string
>
<
string
>
ios
<
/string
>
<
k
e
y
>
SupportedPlatformVariant
<
/k
e
y
>
<
string
>
simulator
<
/string
>
<
/
d
i
c
t
>
<
/
d
i
c
t
>
<
d
i
c
t
>
<
d
i
c
t
>
<
k
e
y
>
BinaryPath
<
/k
e
y
>
<
k
e
y
>
BinaryPath
<
/k
e
y
>
<
string
>
QmsPluginFramework.framework/QmsPluginFramework
<
/string
>
<
string
>
QmsPluginFramework.framework/QmsPluginFramework
<
/string
>
<
k
e
y
>
LibraryIdentifier
<
/k
e
y
>
<
k
e
y
>
LibraryIdentifier
<
/k
e
y
>
<
string
>
ios-arm64
_x86_64-simulator
<
/string
>
<
string
>
ios-arm64
<
/string
>
<
k
e
y
>
LibraryPath
<
/k
e
y
>
<
k
e
y
>
LibraryPath
<
/k
e
y
>
<
string
>
QmsPluginFramework.framework
<
/string
>
<
string
>
QmsPluginFramework.framework
<
/string
>
<
k
e
y
>
SupportedArchitectures
<
/k
e
y
>
<
k
e
y
>
SupportedArchitectures
<
/k
e
y
>
<
a
rr
a
y
>
<
a
rr
a
y
>
<
string
>
arm64
<
/string
>
<
string
>
arm64
<
/string
>
<
string
>
x86_64
<
/string
>
<
/
a
rr
a
y
>
<
/
a
rr
a
y
>
<
k
e
y
>
SupportedPlatform
<
/k
e
y
>
<
k
e
y
>
SupportedPlatform
<
/k
e
y
>
<
string
>
ios
<
/string
>
<
string
>
ios
<
/string
>
<
k
e
y
>
SupportedPlatformVariant
<
/k
e
y
>
<
string
>
simulator
<
/string
>
<
/
d
i
c
t
>
<
/
d
i
c
t
>
<
/
a
rr
a
y
>
<
/
a
rr
a
y
>
<
k
e
y
>
CFBundlePackageType
<
/k
e
y
>
<
k
e
y
>
CFBundlePackageType
<
/k
e
y
>
...
...
framework/QmsPluginFramework/QmsPluginFramework.xcframework/ios-arm64/QmsPluginFramework.framework/QmsPluginFramework
View file @
db23c5fb
No preview for this file type
framework/QmsPluginFramework/QmsPluginFramework.xcframework/ios-arm64_x86_64-simulator/QmsPluginFramework.framework/QmsPluginFramework
View file @
db23c5fb
No preview for this file type
framework/QmsPluginFramework/QmsPluginFramework/AddIssue/DetailsViewController.mm
View file @
db23c5fb
// DetailsViewController.mm
#import "DetailsViewController.h"
#import "DetailsViewController.h"
@interface AddIssueDetailsViewController ()
@interface AddIssueDetailsViewController ()
@property (nonatomic, strong) UIView *headerView;
@property (nonatomic, strong) UIScrollView *scrollView;
@property (nonatomic, strong) UIScrollView *scrollView;
@property (nonatomic, strong) UITextField *locationField;
@property (nonatomic, strong) UITextField *locationField;
@property (nonatomic, strong) UITextView *commentField;
@property (nonatomic, strong) UITextView *commentField;
@property (nonatomic, strong) UIButton *submitButton;
@property (nonatomic, strong) UIButton *submitButton;
@property (nonatomic, strong) UIButton *resetButton;
@end
@end
@implementation AddIssueDetailsViewController
@implementation AddIssueDetailsViewController
...
@@ -13,34 +14,125 @@
...
@@ -13,34 +14,125 @@
- (void)viewDidLoad {
- (void)viewDidLoad {
[super viewDidLoad];
[super viewDidLoad];
self.view.backgroundColor = UIColor.whiteColor;
self.view.backgroundColor = UIColor.whiteColor;
[self setupHeader];
[self setupForm];
// Create all views (don’t position them yet)
[self createHeader];
[self createForm];
}
}
- (void)setupHeader {
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
CGFloat topInset = self.view.safeAreaInsets.top;
CGFloat topInset = self.view.safeAreaInsets.top;
UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, topInset, self.view.bounds.size.width, 48)];
CGFloat headerHeight = 48.0;
header.backgroundColor = [UIColor colorWithRed:0/255.0 green:109/255.0 blue:141/255.0 alpha:1];
header.autoresizingMask = UIViewAutoresizingFlexibleWidth;
// Header layout
[self.view addSubview:header];
self.headerView.frame = CGRectMake(0, topInset, self.view.bounds.size.width, headerHeight);
// Title Label
UILabel *title = [self.headerView viewWithTag:101];
if (title) {
title.frame = CGRectMake(0, 8, self.headerView.bounds.size.width, 32);
}
// Scroll view layout (below header)
CGFloat scrollY = topInset + headerHeight;
self.scrollView.frame = CGRectMake(0, scrollY,
self.view.bounds.size.width,
self.view.bounds.size.height - scrollY);
// Adjust internal subviews (since width may have changed)
self.locationField.frame = CGRectMake(20, 50, self.view.bounds.size.width - 40, 40);
self.commentField.frame = CGRectMake(20, 140, self.view.bounds.size.width - 40, 100);
self.submitButton.frame = CGRectMake(20, 260, self.view.bounds.size.width - 40, 48);
}
UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(0, 8, header.bounds.size.width, 32)];
#pragma mark - Setup
- (void)createHeader {
// Header container
self.headerView = [[UIView alloc] init];
self.headerView.backgroundColor = [UIColor colorWithRed:0/255.0 green:109/255.0 blue:141/255.0 alpha:1];
self.headerView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:self.headerView];
// Back button (SF Symbol)
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeSystem];
backButton.translatesAutoresizingMaskIntoConstraints = NO;
UIImage *backImage = [UIImage systemImageNamed:@"chevron.left"];
backImage = [backImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[backButton setImage:backImage forState:UIControlStateNormal];
backButton.tintColor = [UIColor whiteColor];
backButton.backgroundColor = [UIColor clearColor];
[backButton addTarget:self action:@selector(dismissSelf)
forControlEvents:UIControlEventTouchUpInside];
[self.headerView addSubview:backButton];
// Title label
UILabel *title = [[UILabel alloc] init];
title.translatesAutoresizingMaskIntoConstraints = NO;
title.text = @"Add Issue Details";
title.text = @"Add Issue Details";
title.textColor = UIColor.whiteColor;
title.textColor = UIColor.whiteColor;
title.font = [UIFont systemFontOfSize:18 weight:UIFontWeightMedium];
title.font = [UIFont systemFontOfSize:18 weight:UIFontWeightMedium];
title.textAlignment = NSTextAlignmentCenter;
title.textAlignment = NSTextAlignmentCenter;
[header addSubview:title];
[self.headerView addSubview:title];
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
// ✅ Reset button (refresh icon)
backButton.frame = CGRectMake(12, 8, 32, 32);
self.resetButton = [UIButton buttonWithType:UIButtonTypeSystem];
[backButton setImage:[UIImage imageNamed:@"back24"] forState:UIControlStateNormal];
self.resetButton.translatesAutoresizingMaskIntoConstraints = NO;
[backButton addTarget:self action:@selector(dismissSelf) forControlEvents:UIControlEventTouchUpInside];
[header addSubview:backButton];
UIImage *refreshImage = [UIImage systemImageNamed:@"arrow.clockwise"];
refreshImage = [refreshImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[self.resetButton setImage:refreshImage forState:UIControlStateNormal];
self.resetButton.tintColor = [UIColor whiteColor];
self.resetButton.backgroundColor = [UIColor clearColor];
[self.resetButton addTarget:self
action:@selector(handleReset)
forControlEvents:UIControlEventTouchUpInside];
[self.headerView addSubview:self.resetButton];
// Status bar background (same color as header)
UIView *statusBarBackground = [[UIView alloc] init];
statusBarBackground.backgroundColor = self.headerView.backgroundColor;
statusBarBackground.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:statusBarBackground];
// Auto Layout
UILayoutGuide *safe = self.view.safeAreaLayoutGuide;
[NSLayoutConstraint activateConstraints:@[
// Header
[self.headerView.topAnchor constraintEqualToAnchor:safe.topAnchor],
[self.headerView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor],
[self.headerView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor],
[self.headerView.heightAnchor constraintEqualToConstant:48],
// Back button
[backButton.leadingAnchor constraintEqualToAnchor:self.headerView.leadingAnchor constant:8],
[backButton.centerYAnchor constraintEqualToAnchor:self.headerView.centerYAnchor],
[backButton.widthAnchor constraintEqualToConstant:44],
[backButton.heightAnchor constraintEqualToConstant:44],
// Title centered
[title.centerXAnchor constraintEqualToAnchor:self.headerView.centerXAnchor],
[title.centerYAnchor constraintEqualToAnchor:self.headerView.centerYAnchor],
// ✅ Reset button (right)
[self.resetButton.trailingAnchor constraintEqualToAnchor:self.headerView.trailingAnchor constant:-8],
[self.resetButton.centerYAnchor constraintEqualToAnchor:self.headerView.centerYAnchor],
[self.resetButton.widthAnchor constraintEqualToConstant:44],
[self.resetButton.heightAnchor constraintEqualToConstant:44],
// Status bar color fill
[statusBarBackground.topAnchor constraintEqualToAnchor:self.view.topAnchor],
[statusBarBackground.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor],
[statusBarBackground.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor],
[statusBarBackground.bottomAnchor constraintEqualToAnchor:safe.topAnchor],
]];
}
}
- (void)setupForm {
- (void)createForm {
CGFloat topInset = self.view.safeAreaInsets.top + 48;
self.scrollView = [[UIScrollView alloc] init];
self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, topInset, self.view.bounds.size.width, self.view.bounds.size.height - topInset)];
[self.view addSubview:self.scrollView];
[self.view addSubview:self.scrollView];
UILabel *locationLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 200, 20)];
UILabel *locationLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 200, 20)];
...
@@ -48,7 +140,7 @@
...
@@ -48,7 +140,7 @@
locationLabel.font = [UIFont boldSystemFontOfSize:16];
locationLabel.font = [UIFont boldSystemFontOfSize:16];
[self.scrollView addSubview:locationLabel];
[self.scrollView addSubview:locationLabel];
self.locationField = [[UITextField alloc] initWithFrame:CGRect
Make(20, 50, self.view.bounds.size.width - 40, 40)
];
self.locationField = [[UITextField alloc] initWithFrame:CGRect
Zero
];
self.locationField.borderStyle = UITextBorderStyleRoundedRect;
self.locationField.borderStyle = UITextBorderStyleRoundedRect;
[self.scrollView addSubview:self.locationField];
[self.scrollView addSubview:self.locationField];
...
@@ -57,14 +149,14 @@
...
@@ -57,14 +149,14 @@
commentLabel.font = [UIFont boldSystemFontOfSize:16];
commentLabel.font = [UIFont boldSystemFontOfSize:16];
[self.scrollView addSubview:commentLabel];
[self.scrollView addSubview:commentLabel];
self.commentField = [[UITextView alloc] initWithFrame:CGRect
Make(20, 140, self.view.bounds.size.width - 40, 100)
];
self.commentField = [[UITextView alloc] initWithFrame:CGRect
Zero
];
self.commentField.layer.borderColor = [UIColor lightGrayColor].CGColor;
self.commentField.layer.borderColor = [UIColor lightGrayColor].CGColor;
self.commentField.layer.borderWidth = 1.0;
self.commentField.layer.borderWidth = 1.0;
self.commentField.layer.cornerRadius = 8;
self.commentField.layer.cornerRadius = 8;
[self.scrollView addSubview:self.commentField];
[self.scrollView addSubview:self.commentField];
self.submitButton = [UIButton buttonWithType:UIButtonTypeSystem];
self.submitButton = [UIButton buttonWithType:UIButtonTypeSystem];
self.submitButton.frame = CGRect
Make(20, 260, self.view.bounds.size.width - 40, 48)
;
self.submitButton.frame = CGRect
Zero
;
self.submitButton.backgroundColor = [UIColor colorWithRed:0/255.0 green:109/255.0 blue:141/255.0 alpha:1];
self.submitButton.backgroundColor = [UIColor colorWithRed:0/255.0 green:109/255.0 blue:141/255.0 alpha:1];
[self.submitButton setTitle:@"Submit" forState:UIControlStateNormal];
[self.submitButton setTitle:@"Submit" forState:UIControlStateNormal];
[self.submitButton setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
[self.submitButton setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
...
@@ -73,6 +165,23 @@
...
@@ -73,6 +165,23 @@
[self.scrollView addSubview:self.submitButton];
[self.scrollView addSubview:self.submitButton];
}
}
- (void)handleReset {
NSLog(@"🔄 Reset button tapped");
self.locationField.text = @"";
self.commentField.text = @"";
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Fields Cleared"
message:@"All inputs have been reset."
preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"OK"
style:UIAlertActionStyleDefault
handler:nil]];
[self presentViewController:alert animated:YES completion:nil];
}
#pragma mark - Actions
- (void)dismissSelf {
- (void)dismissSelf {
[self dismissViewControllerAnimated:YES completion:nil];
[self dismissViewControllerAnimated:YES completion:nil];
}
}
...
@@ -86,4 +195,3 @@
...
@@ -86,4 +195,3 @@
}
}
@end
@end
framework/QmsPluginFramework/QmsPluginFramework/AddIssue/PlanViewController.mm
View file @
db23c5fb
...
@@ -29,55 +29,104 @@
...
@@ -29,55 +29,104 @@
- (void)viewDidLayoutSubviews {
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[super viewDidLayoutSubviews];
// Get safe area + bounds
CGFloat topInset = self.view.safeAreaInsets.top;
CGFloat topInset = self.view.safeAreaInsets.top;
CGFloat headerHeight = 48.0;
CGFloat headerHeight = 48.0;
// Layout header
// Layout header
self.headerView.frame = CGRectMake(0, topInset, self.view.bounds.size.width, headerHeight);
self.headerView.frame = CGRectMake(0, topInset, self.view.bounds.size.width, headerHeight);
// Layout title
// Layout items within header
self.titleLabel.frame = CGRectMake(0, 8, self.headerView.bounds.size.width, 32);
self.helpButton.frame = CGRectMake(self.headerView.bounds.size.width - 44, 8, 32, 32);
self.backButton.frame = CGRectMake(12, 8, 32, 32);
self.backButton.frame = CGRectMake(12, 8, 32, 32);
self.helpButton.frame = CGRectMake(self.headerView.bounds.size.width - 44, 8, 32, 32);
self.titleLabel.frame = CGRectMake(0, 8, self.headerView.bounds.size.width, 32);
// Layout scroll view
// Layout scroll view
CGFloat scrollY = topInset + headerHeight;
CGFloat scrollY = topInset + headerHeight;
self.scrollView.frame = CGRectMake(0, scrollY, self.view.bounds.size.width,
self.scrollView.frame = CGRectMake(0, scrollY, self.view.bounds.size.width, self.view.bounds.size.height - scrollY);
self.view.bounds.size.height - scrollY);
self.planImageView.frame = self.scrollView.bounds;
self.planImageView.frame = self.scrollView.bounds;
// Make absolutely sure header is above scroll view
[self.view bringSubviewToFront:self.headerView];
[self.view bringSubviewToFront:self.headerView];
}
}
#pragma mark - UI Creation
#pragma mark - UI Creation
- (void)createHeader {
- (void)createHeader {
// 🟩 Status bar background view
UIView *statusBarBackground = [[UIView alloc] init];
statusBarBackground.backgroundColor = [UIColor colorWithRed:0/255.0
green:109/255.0
blue:141/255.0
alpha:1];
statusBarBackground.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:statusBarBackground];
// 🟦 Header background view
self.headerView = [[UIView alloc] init];
self.headerView = [[UIView alloc] init];
self.headerView.backgroundColor = [UIColor colorWithRed:0/255.0 green:109/255.0 blue:141/255.0 alpha:1];
self.headerView.backgroundColor = statusBarBackground.backgroundColor;
self.headerView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:self.headerView];
[self.view addSubview:self.headerView];
// Back button
// Back button
self.backButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.backButton = [UIButton buttonWithType:UIButtonTypeSystem];
[self.backButton setImage:[UIImage imageNamed:@"back24"] forState:UIControlStateNormal];
self.backButton.translatesAutoresizingMaskIntoConstraints = NO;
[self.backButton addTarget:self action:@selector(handleBack) forControlEvents:UIControlEventTouchUpInside];
UIImage *backImage = [[UIImage systemImageNamed:@"chevron.left"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[self.backButton setImage:backImage forState:UIControlStateNormal];
self.backButton.tintColor = [UIColor whiteColor];
[self.backButton addTarget:self action:@selector(handleBack)
forControlEvents:UIControlEventTouchUpInside];
[self.headerView addSubview:self.backButton];
[self.headerView addSubview:self.backButton];
// Title
// Title
label
self.titleLabel = [[UILabel alloc] init];
self.titleLabel = [[UILabel alloc] init];
self.titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
self.titleLabel.text = @"Plan Viewer";
self.titleLabel.text = @"Plan Viewer";
self.titleLabel.textColor = UIColor.whiteColor;
self.titleLabel.textColor = UIColor.whiteColor;
self.titleLabel.font = [UIFont systemFontOfSize:18 weight:UIFontWeightMedium];
self.titleLabel.font = [UIFont systemFontOfSize:18 weight:UIFontWeightMedium];
self.titleLabel.textAlignment = NSTextAlignmentCenter;
self.titleLabel.textAlignment = NSTextAlignmentCenter;
[self.headerView addSubview:self.titleLabel];
[self.headerView addSubview:self.titleLabel];
// Help button
// Help button
self.helpButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.helpButton = [UIButton buttonWithType:UIButtonTypeSystem];
[self.helpButton setImage:[UIImage imageNamed:@"btn_white_help_3x"] forState:UIControlStateNormal];
self.helpButton.translatesAutoresizingMaskIntoConstraints = NO;
[self.helpButton addTarget:self action:@selector(showTutorial) forControlEvents:UIControlEventTouchUpInside];
UIImage *helpImage = [[UIImage systemImageNamed:@"questionmark.circle"]
imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[self.helpButton setImage:helpImage forState:UIControlStateNormal];
self.helpButton.tintColor = [UIColor whiteColor];
[self.helpButton addTarget:self action:@selector(showTutorial)
forControlEvents:UIControlEventTouchUpInside];
[self.headerView addSubview:self.helpButton];
[self.headerView addSubview:self.helpButton];
// ✅ Constraints
UILayoutGuide *safe = self.view.safeAreaLayoutGuide;
[NSLayoutConstraint activateConstraints:@[
// Status bar background
[statusBarBackground.topAnchor constraintEqualToAnchor:self.view.topAnchor],
[statusBarBackground.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor],
[statusBarBackground.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor],
[statusBarBackground.bottomAnchor constraintEqualToAnchor:safe.topAnchor],
// Header pinned below safe area
[self.headerView.topAnchor constraintEqualToAnchor:safe.topAnchor],
[self.headerView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor],
[self.headerView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor],
[self.headerView.heightAnchor constraintEqualToConstant:48],
// Back button
[self.backButton.leadingAnchor constraintEqualToAnchor:self.headerView.leadingAnchor constant:8],
[self.backButton.centerYAnchor constraintEqualToAnchor:self.headerView.centerYAnchor],
[self.backButton.widthAnchor constraintEqualToConstant:44],
[self.backButton.heightAnchor constraintEqualToConstant:44],
// Help button
[self.helpButton.trailingAnchor constraintEqualToAnchor:self.headerView.trailingAnchor constant:-8],
[self.helpButton.centerYAnchor constraintEqualToAnchor:self.headerView.centerYAnchor],
[self.helpButton.widthAnchor constraintEqualToConstant:44],
[self.helpButton.heightAnchor constraintEqualToConstant:44],
// Title centered
[self.titleLabel.centerXAnchor constraintEqualToAnchor:self.headerView.centerXAnchor],
[self.titleLabel.centerYAnchor constraintEqualToAnchor:self.headerView.centerYAnchor],
]];
}
}
- (void)createScrollView {
- (void)createScrollView {
...
@@ -94,7 +143,7 @@
...
@@ -94,7 +143,7 @@
UIImage *testImage = [UIImage imageNamed:@"image_placeholder"];
UIImage *testImage = [UIImage imageNamed:@"image_placeholder"];
if (!testImage) {
if (!testImage) {
NSLog(@"❌ image_placeholder not found in bundle!");
NSLog(@"❌ image_placeholder not found in bundle!");
self.planImageView.backgroundColor = [UIColor
systemTeal
Color];
self.planImageView.backgroundColor = [UIColor
white
Color];
// 👉 Temporary test button
// 👉 Temporary test button
UIButton *testButton = [UIButton buttonWithType:UIButtonTypeSystem];
UIButton *testButton = [UIButton buttonWithType:UIButtonTypeSystem];
...
@@ -148,4 +197,9 @@
...
@@ -148,4 +197,9 @@
return self.planImageView;
return self.planImageView;
}
}
#pragma mark - Status Bar Style
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent; // ✅ White text/icons
}
@end
@end
framework/QmsPluginFramework/QmsPluginFramework/Dashboard/DashboardViewController.mm
View file @
db23c5fb
This diff is collapsed.
Click to expand it.
ios/QmsPluginFramework.xcframework/Info.plist
View file @
db23c5fb
...
@@ -8,32 +8,32 @@
...
@@ -8,32 +8,32 @@
<
k
e
y
>
BinaryPath
<
/k
e
y
>
<
k
e
y
>
BinaryPath
<
/k
e
y
>
<
string
>
QmsPluginFramework.framework/QmsPluginFramework
<
/string
>
<
string
>
QmsPluginFramework.framework/QmsPluginFramework
<
/string
>
<
k
e
y
>
LibraryIdentifier
<
/k
e
y
>
<
k
e
y
>
LibraryIdentifier
<
/k
e
y
>
<
string
>
ios-arm64
<
/string
>
<
string
>
ios-arm64
_x86_64-simulator
<
/string
>
<
k
e
y
>
LibraryPath
<
/k
e
y
>
<
k
e
y
>
LibraryPath
<
/k
e
y
>
<
string
>
QmsPluginFramework.framework
<
/string
>
<
string
>
QmsPluginFramework.framework
<
/string
>
<
k
e
y
>
SupportedArchitectures
<
/k
e
y
>
<
k
e
y
>
SupportedArchitectures
<
/k
e
y
>
<
a
rr
a
y
>
<
a
rr
a
y
>
<
string
>
arm64
<
/string
>
<
string
>
arm64
<
/string
>
<
string
>
x86_64
<
/string
>
<
/
a
rr
a
y
>
<
/
a
rr
a
y
>
<
k
e
y
>
SupportedPlatform
<
/k
e
y
>
<
k
e
y
>
SupportedPlatform
<
/k
e
y
>
<
string
>
ios
<
/string
>
<
string
>
ios
<
/string
>
<
k
e
y
>
SupportedPlatformVariant
<
/k
e
y
>
<
string
>
simulator
<
/string
>
<
/
d
i
c
t
>
<
/
d
i
c
t
>
<
d
i
c
t
>
<
d
i
c
t
>
<
k
e
y
>
BinaryPath
<
/k
e
y
>
<
k
e
y
>
BinaryPath
<
/k
e
y
>
<
string
>
QmsPluginFramework.framework/QmsPluginFramework
<
/string
>
<
string
>
QmsPluginFramework.framework/QmsPluginFramework
<
/string
>
<
k
e
y
>
LibraryIdentifier
<
/k
e
y
>
<
k
e
y
>
LibraryIdentifier
<
/k
e
y
>
<
string
>
ios-arm64
_x86_64-simulator
<
/string
>
<
string
>
ios-arm64
<
/string
>
<
k
e
y
>
LibraryPath
<
/k
e
y
>
<
k
e
y
>
LibraryPath
<
/k
e
y
>
<
string
>
QmsPluginFramework.framework
<
/string
>
<
string
>
QmsPluginFramework.framework
<
/string
>
<
k
e
y
>
SupportedArchitectures
<
/k
e
y
>
<
k
e
y
>
SupportedArchitectures
<
/k
e
y
>
<
a
rr
a
y
>
<
a
rr
a
y
>
<
string
>
arm64
<
/string
>
<
string
>
arm64
<
/string
>
<
string
>
x86_64
<
/string
>
<
/
a
rr
a
y
>
<
/
a
rr
a
y
>
<
k
e
y
>
SupportedPlatform
<
/k
e
y
>
<
k
e
y
>
SupportedPlatform
<
/k
e
y
>
<
string
>
ios
<
/string
>
<
string
>
ios
<
/string
>
<
k
e
y
>
SupportedPlatformVariant
<
/k
e
y
>
<
string
>
simulator
<
/string
>
<
/
d
i
c
t
>
<
/
d
i
c
t
>
<
/
a
rr
a
y
>
<
/
a
rr
a
y
>
<
k
e
y
>
CFBundlePackageType
<
/k
e
y
>
<
k
e
y
>
CFBundlePackageType
<
/k
e
y
>
...
...
ios/QmsPluginFramework.xcframework/ios-arm64/QmsPluginFramework.framework/QmsPluginFramework
View file @
db23c5fb
No preview for this file type
ios/QmsPluginFramework.xcframework/ios-arm64_x86_64-simulator/QmsPluginFramework.framework/QmsPluginFramework
View file @
db23c5fb
No preview for this file type
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment