Merge branch 'mbruce/bugfixes' into 'develop'

bug merge

See merge request BPHV_MIPS/vds_ios!114
This commit is contained in:
Bruce, Matt R 2023-09-19 17:51:14 +00:00
commit 6fc8c0cf49
5 changed files with 69 additions and 14 deletions

View File

@ -1175,7 +1175,7 @@
BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 42;
CURRENT_PROJECT_VERSION = 43;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
@ -1212,7 +1212,7 @@
BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 42;
CURRENT_PROJECT_VERSION = 43;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;

View File

@ -77,6 +77,12 @@ open class Button: ButtonBase, Useable {
}
}
}
/// Enum used to describe the width of a fixed value or percentage of parent's width.
public enum Width {
case percentage(CGFloat)
case value(CGFloat)
}
//--------------------------------------------------
// MARK: - Private Properties
@ -92,21 +98,30 @@ open class Button: ButtonBase, Useable {
/// The Use for this Button.
open var use: Use = .primary { didSet { setNeedsUpdate() } }
private var _width: CGFloat? = nil
private var _width: Width? = nil
/// If there is a width that is larger than this size's minmumWidth, the button will resize to this width.
open var width: CGFloat? {
open var width: Width? {
get { _width }
set {
if let newValue, newValue > size.minimumWidth {
_width = newValue
if let newValue {
switch newValue {
case .percentage(let percentage):
if percentage <= 100.0 {
_width = newValue
}
case .value(let value):
if value > 0 && value > size.minimumWidth {
_width = newValue
}
}
} else {
_width = nil
}
setNeedsUpdate()
}
}
open override var textColor: UIColor {
textColorConfiguration.getColor(self)
}
@ -118,13 +133,35 @@ open class Button: ButtonBase, Useable {
/// The natural size for the receiving view, considering only properties of the view itself.
open override var intrinsicContentSize: CGSize {
guard let width, width > 0 else {
var superSize = super.intrinsicContentSize
superSize.height = size.height
return superSize
// get the intrinsic size
var defaultSize = super.intrinsicContentSize
// ensure the size height
defaultSize.height = size.height
// take the max width either intrinsic or size's minimumWidth
defaultSize.width = max(defaultSize.width, size.minimumWidth)
guard let width else {
return defaultSize
}
return CGSize(width: width > size.minimumWidth ? width : size.minimumWidth, height: size.height)
switch width {
case .percentage(let percentage):
// test the superview's width against the percentage to ensure
// it is greater than the size's minimum width
guard let superWidth = superview?.frame.width else {
return defaultSize
}
// if so set the width off percentage
defaultSize.width = max(superWidth * (percentage / 100), size.minimumWidth)
return defaultSize
case .value(let value):
// test fixed value vs minimum width and take the greater value
defaultSize.width = max(value, size.minimumWidth)
return defaultSize
}
}
//--------------------------------------------------
@ -216,6 +253,12 @@ open class Button: ButtonBase, Useable {
invalidateIntrinsicContentSize()
}
open override func layoutSubviews() {
super.layoutSubviews()
invalidateIntrinsicContentSize()
}
}
extension Use {

View File

@ -149,7 +149,7 @@ open class ButtonGroup: View {
case .percentage(let value): percentage = value
}
}
buttons.forEach { ($0 as? Button)?.width = width }
buttons.forEach { if let width { ($0 as? Button)?.width = .value(width) } }
positionLayout.buttonPercentage = percentage
collectionView.reloadData()

View File

@ -44,6 +44,7 @@ open class Icon: View {
//--------------------------------------------------
/// UIImageView used to render the icon.
open var imageView = UIImageView().with {
$0.isAccessibilityElement = false
$0.translatesAutoresizingMaskIntoConstraints = false
$0.contentMode = .scaleAspectFill
$0.clipsToBounds = true
@ -78,7 +79,7 @@ open class Icon: View {
/// Called once when a view is initialized and is used to Setup additional UI or other constants and configurations.
open override func setup() {
super.setup()
setContentCompressionResistancePriority(.required, for: .vertical)
setContentHuggingPriority(.required, for: .vertical)
setContentCompressionResistancePriority(.required, for: .horizontal)
@ -123,6 +124,11 @@ open class Icon: View {
color = VDSColor.paletteBlack
imageView.image = nil
}
open override func updateAccessibility() {
super.updateAccessibility()
accessibilityLabel = name?.rawValue ?? "icon"
}
//--------------------------------------------------
// MARK: - Private Methods

View File

@ -1,3 +1,9 @@
1.0.43
=======
- CXTDT-464973 - Button - Width percentage parameter missing.
- ONEAPP-5106 - Icon - Name not used in Voice over.
- CXTDT-464974 - Line - Needs vertical orientation added.
1.0.42
=======
- CXTDT-462698 - Tabs - Incorrect letter spacing on Large tabs